我可以测试脚本是否已获得授权,如果没有,可以调用Google授权对话框吗?

时间:2012-06-27 19:05:28

标签: google-apps-script

我的用户必须每4周在新的电子表格中授权脚本。我想在第一次打开电子表格时立即调用授权对话框,如果脚本已经被授权,则不要调用它。

目前,我发现这样做的最简单方法是让他们在空白纸上单击“转到主表”按钮(即附带脚本的图纸)。如果他们已经授权他们会被直接带到Main,如果没有它会触发授权通知 - 在这种情况下他们最终必须在他们授权后第二次点击“转到主表”按钮。

我不喜欢它,它很笨重。有没有办法测试脚本是否需要授权并直接调用对话框,例如来自onOpen活动?

1 个答案:

答案 0 :(得分:1)

这是单个用户可以使授权过程简单明了的可行解决方案。 我知道它不会满足您的用例,因为您在同一个电子表格中有多个用户,但它可能包含您可能感兴趣的部分。

这是代码和example SS(制作它的副本以获得编辑权限,不要忘记它只能运行一次!(至少就授权而言,你总是可以撤消表格删除!!))

function onOpen(){
    if(SpreadsheetApp.getActiveSpreadsheet().getNumSheets()==1){  
var ss = SpreadsheetApp.getActiveSpreadsheet();
  var menuEntries = [{name: "test", functionName: "test"},
                     ];
  ss.addMenu("Recherche",menuEntries);// custom menu
                     }
} // menu appears only if authorization has been processed

function test(){
  if(SpreadsheetApp.getActiveSpreadsheet().getNumSheets()==2){
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  SpreadsheetApp.setActiveSheet(ss.getSheets()[0]);// make first sheet active to be sure
  var del = ss.deleteActiveSheet();
  onOpen;
  }
  Logger.log(findThelastRow('d',0))
    }
//
//
    function findThelastRow(column,index){
              var doc = SpreadsheetApp.getActiveSpreadsheet();
              var lastRow = doc.getSheets()[index].getLastRow()+1;// check last row on the appropriate sheet
              var coldata = doc.getSheets()[index].getRange(column+2+':'+column+lastRow).getValues();// I begin on Row 2 just as you did
          for(i=coldata.length-1;i>=0;i--){
             if(coldata[i][0]!=''){return i+2;break}
          }
          return 0;
        }

注意我在这个例子中添加的功能仅仅是示例!

重要的是在授权完成时删除第一张纸的部分。希望这一点足够清楚; - )