로그인 한 학생의 이메일 주소를보고 등급 책자에서 이메일을 찾은 다음 이메일이있는 열을 기반으로 학생의 성적을 표시하는 성적 책 웹 앱 스크립트가 있습니다. 유일한 문제는 스프레드 시트가 공개 된 경우에만 작동한다는 것입니다. 어떻게하면 스프레드 시트를 비공개로 유지하고이 스크립트를 작동시킬 수 있습니까? '링크가있는 모든 사용자에게'를 선택하면 스프레드 시트를 찾을 수는 없지만 비공개로 유지하는 것이 좋습니다. 또한 "Deploy as Web App"인터페이스에서 앱은 사용자가 아닌 사용자로 실행해야합니다. 어떤 아이디어?Google Apps Script : 비공개 스프레드 시트에서 읽기
var ss = SpreadsheetApp.openByUrl('https://docs.google.com/spreadsheet/ccc?key=ID');
var sh1 = ss.getSheetByName('StudentGrades');
var logsheet = ss.getSheetByName('logsheet');
var data = sh1.getDataRange().getValues();
var user = Session.getEffectiveUser()
Logger.log(user)
function doGet() {
var app = UiApp.createApplication();
if(!getcol(user)){
var warn = app.createTextBox().setWidth('500').setValue("Your results are not available or you don't have permission to view these data");// if user is not in the list, warning + return
app.add(warn)
return app
}
var grid = app.createGrid(data.length, 2).setWidth('300px').setBorderWidth(1).setCellPadding(0).setCellSpacing(0).setStyleAttribute('borderCollapse','collapse').setId('grid');
var text = app.createLabel(user).setWidth('300px');
var col = getcol(user)
grid.setWidget(0,1,text).setText(0, 0, 'Results for');
grid.setStyleAttribute('textAlign','center')
for(n=1;n<data.length;++n){
grid.setText(n, 0, string(data[n][0]));
grid.setText(n, 1, string(data[n][col]));
grid.setStyleAttributes(n-1, 0, {'fontWeight':'bold','background':'#fff','border':'1px solid #000'});//left column css attributes
grid.setStyleAttributes(n-1, 1, {'fontWeight':'bold','background':'#fff','border':'1px solid #000'});//right column css attributes
}
app.add(grid);
return app
}
function string(value){
Logger.log(typeof(value))
if (typeof(value)=='string'){return value};// if string then don't do anything
if (typeof(value)=='number'){return Utilities.formatString('%.1f/20',value)};// if number ther format with 1 decimal
if (typeof(value)=='object'){return Utilities.formatDate(value, Session.getTimeZone(), "MM-dd")};//object >> date in this case, format month/day
return 'error'
}
function getcol(mail){
if(data[0].toString().indexOf(mail.toString())!=-1){
for(zz=1;zz<data[0].length;++zz){
if(data[0][zz] == mail){var colindex=zz;break}
}
return colindex
}
return false
}
귀하의 도움에 감사드립니다 (귀하의 스크립트 수정 방법은 위 참조). 나는 매 학기마다 적어도 5 개의 다른 과목으로 성적표를 사용할 것입니다. 사용자 이름과 비밀번호로 로그인 프로세스를 추가하는 것은 매우 불편할 것입니다. 이것을하기위한 또 다른 방법이 있어야합니다. oAuth와 뭔가? – Acornrevolution
다른 해결책을 찾으려면 편집을 참조하십시오. –