Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google apps script 我是否可以测试脚本是否已授权,如果未授权,是否可以调用Google授权对话框?_Google Apps Script - Fatal编程技术网

Google apps script 我是否可以测试脚本是否已授权,如果未授权,是否可以调用Google授权对话框?

Google apps script 我是否可以测试脚本是否已授权,如果未授权,是否可以调用Google授权对话框?,google-apps-script,Google Apps Script,我的用户必须每4周在新的电子表格中授权一次脚本。我希望在他们第一次打开电子表格时立即调用“授权”对话框,如果脚本已被授权,则不调用该对话框 目前,我发现最简单的方法是让他们在空白图纸上单击“转到主图纸”按钮(即带有附加脚本的图纸)。如果他们已经授权,他们会被直接带到主工作表,如果没有,则会触发授权通知-在这种情况下,他们必须在授权后第二次单击“转到主工作表”按钮 我不喜欢它,它很笨重。是否有一种方法可以测试脚本是否需要授权并直接调用对话框,例如从onOpen事件调用?这是一种可能的解决方案,可供

我的用户必须每4周在新的电子表格中授权一次脚本。我希望在他们第一次打开电子表格时立即调用“授权”对话框,如果脚本已被授权,则不调用该对话框

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


我不喜欢它,它很笨重。是否有一种方法可以测试脚本是否需要授权并直接调用对话框,例如从onOpen事件调用?

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

这是代码和(复制一份以获得编辑权限,不要忘记它只能工作一次!)

请注意,我在这个示例中使用的函数只是示例


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

您的解决方案还不错;-)您还可以删除此函数中的第一张空白页,该函数仅在授权时运行,这样您就可以消除此警告…谢谢Serge。。。我需要更多的要求,但我无意中撞到了enter,所以我会再次犯同样的错误——红脸!遗憾的是,在我的用例中,删除工作表不是一个选项,因为在创建后的前4周内,大约有30个用户需要以“可以编辑”的权限使用我的电子表格。这是第一阶段。在第2阶段,空白页会按照您的建议删除。我对你的短语“一个只有授权才能运行的函数”很感兴趣。这正是我发现能够进行测试非常有用的东西,但我不知道如何实现这一点,除非得到授权,否则没有函数运行。你能提供进一步的建议吗?这是我一直在想的,但它只适用于单个用户。最后我写了一个“答案”,以便能够正确地显示代码。。。
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;
        }