我的用户将不得不每 4 周授权一次新电子表格中的脚本。我想在他们第一次打开电子表格时立即调用授权对话框,如果脚本已经被授权,则不要调用它。
目前,我发现的最简单的方法是让他们单击空白纸上的“转到主工作表”按钮(即带有附加脚本的绘图)。如果他们已经授权,他们会被直接带到 Main,如果没有,则会触发授权通知 - 在这种情况下,他们最终不得不在授权后再次单击“转到 Main Sheet”按钮。
我不喜欢它,它很笨重。有没有办法测试脚本是否需要授权并直接调用对话框,例如从 onOpen 事件?
我的用户将不得不每 4 周授权一次新电子表格中的脚本。我想在他们第一次打开电子表格时立即调用授权对话框,如果脚本已经被授权,则不要调用它。
目前,我发现的最简单的方法是让他们单击空白纸上的“转到主工作表”按钮(即带有附加脚本的绘图)。如果他们已经授权,他们会被直接带到 Main,如果没有,则会触发授权通知 - 在这种情况下,他们最终不得不在授权后再次单击“转到 Main Sheet”按钮。
我不喜欢它,它很笨重。有没有办法测试脚本是否需要授权并直接调用对话框,例如从 onOpen 事件?
这是单个用户使授权过程简单明了的一种可能的解决方案。我知道它不会满足您的用例,因为您在同一个电子表格上有多个用户,但它可能包含您可能感兴趣的部分。
这是代码和示例 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;
}
注意我在这个例子中的函数只是例子!
重要的是授权完成后删除第一张表的部分。希望这会足够清楚;-)