2013-04-21 7 views
0

로그인 한 학생의 이메일 주소를보고 등급 책자에서 이메일을 찾은 다음 이메일이있는 열을 기반으로 학생의 성적을 표시하는 성적 책 웹 앱 스크립트가 있습니다. 유일한 문제는 스프레드 시트가 공개 된 경우에만 작동한다는 것입니다. 어떻게하면 스프레드 시트를 비공개로 유지하고이 스크립트를 작동시킬 수 있습니까? '링크가있는 모든 사용자에게'를 선택하면 스프레드 시트를 찾을 수는 없지만 비공개로 유지하는 것이 좋습니다. 또한 "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 
} 

답변

0

것은 당신이 설정 자신과 같은 웹 애플리케이션을 실행하는 동안 개인 스프레드 시트를 유지할 수 있도록하는 '수동 로그인'할 수 게시물의 또 다른에 제안 된 것처럼.

즉, 사용자/비밀번호 키/값 목록을 만들어야하며 각 학생은 자신의 사용자 이름과 비밀번호를 입력해야한다는 것을 의미합니다 (사용자 이름과 비밀번호를 이메일로 보내야 함). 프런트 엔드 로그인 화면에서 결과 표시 부분에 액세스하기 전에 웹 응용 프로그램에 연결).

그 목록을 보관할 가장 좋은 장소는 key : value 형태의 스크립트 속성에있는 것 같습니다.

해당 솔루션을 구현하는 데 더 많은 것이 필요하다면 (그리고 그렇게 할 것이라고 생각한다면) 언제든지 물어보십시오. 귀하의 코멘트 다음


편집 :

좋아, 나는 불쾌한 :) 될 수 있습니다 이해

그냥 스크립트 자체에 이러한 데이터를 저장하기 위해 쉽게되지 않을 것, 궁금 scriptDB 스프레드 시트 값으로 자동 업데이트 할 수 있습니까? 업데이트는 사용자 (또는 계정에서 실행되도록 만드는 타이머 트리거)에 의해 실행되어야하며 스프레드 시트는 비공개로 유지되어야합니다.

학생들은 스프레드 시트에 액세스하지 않고 계정으로 웹 응용 프로그램에 액세스 할 수 있습니다.

+0

귀하의 도움에 감사드립니다 (귀하의 스크립트 수정 방법은 위 참조). 나는 매 학기마다 적어도 5 개의 다른 과목으로 성적표를 사용할 것입니다. 사용자 이름과 비밀번호로 로그인 프로세스를 추가하는 것은 매우 불편할 것입니다. 이것을하기위한 또 다른 방법이 있어야합니다. oAuth와 뭔가? – Acornrevolution

+0

다른 해결책을 찾으려면 편집을 참조하십시오. –

0

사용자로 액세스 한 해당 서비스에서 urlget을 통해 다른 앱 스크립트 서비스를 직접 호출하십시오. 저것은 ss 관련된 일을한다. 서비스 요청시 시간 초과가 발생할 수 있습니다.

0

왜 각 클래스에 대해 Google 그룹을 설정하지 않습니까? 그런 다음 해당 스프레드 시트의 공유 권한에 Google 그룹을 추가하십시오. 이렇게하면 적절한 Google 그룹을 통해 다양한 수업에 이메일을 쉽게 보낼 수 있다는 이점이 있습니다. 이 시나리오에서 학년 스프레드 시트는 비공개로 유지되며 귀하와 Google 그룹에 등록 된 이메일 주소로만 액세스 할 수 있습니다.

+0

그게 실제로 스프레드 시트/성적 책을 공유 할 것입니다. 나는 완전히 피하고 싶습니다. 그것을 공유하면 최소한의 시청 권리를 갖게됩니다. – Acornrevolution

0

많은 유사한 응용 프로그램이있는 Google Apps for Education 제품군을 실행하는 도메인 관리자입니다. 도메인에 대한 관리 권한이 있는지 여부는 언급하지 않았지만 귀하는이를 가정합니다.

나는 모든 스프레드 시트를 비공개로 유지하고 웹 응용 프로그램을 스스로 실행하므로 (스크립트에 필요한 액세스 제공) 정확하게 목표로하고 있다고 생각합니까?

내 생각에 주요 문제는 .getEffectiveUser()에서 필요한 것을 제공하지 않기 때문입니다.Session.getActiveUser.getEmail()을 사용하고 전자 메일 값과 일치하는 학생 개체 (본질적으로 표준 getRowsData 함수를 사용하여 개체로 반환 된 학생 정보 한 장)를 반복합니다 (user = unknown을 찾을 수없는 경우).

학생 기반이 2000 이상인 경우 완벽하게 작동하며 모든 데이터가 비공개이며 앱이 맞춤 정보를 신속하게 제공합니다.

예제 앱을보고 싶다면 알려주세요. 여기에 게시하려면 약간 큽니다.

+0

앱 도메인 내에서 학생들과 일하는 것이 아니며 각각 외부 이메일을 사용하므로 위의 내용을 할인 할 수 있습니다. 사과. –

+0

앱이 아닌 도메인에서 비슷한 것은 있습니까? – Acornrevolution

관련 문제