Google apps script onOpen函数没有';我工作不正常
脚本编辑器:使用onOpen函数编写脚本(见下文)。使用脚本编辑器启动时,它可以正常工作。当打开电子表格时启动,我得到了stmt31“Logger.log(name)”的日志,其他什么都没有发生。为什么? 以下是完整的脚本:Google apps script onOpen函数没有';我工作不正常,google-apps-script,Google Apps Script,脚本编辑器:使用onOpen函数编写脚本(见下文)。使用脚本编辑器启动时,它可以正常工作。当打开电子表格时启动,我得到了stmt31“Logger.log(name)”的日志,其他什么都没有发生。为什么? 以下是完整的脚本: function onOpen() { n0="T22 "; n1=n0+"aktuell" n2=n0+"Master" var y1=DayShift(); Browser.msgBox("Returned with "+y1); }; funct
function onOpen() {
n0="T22 ";
n1=n0+"aktuell"
n2=n0+"Master"
var y1=DayShift();
Browser.msgBox("Returned with "+y1);
};
function DayShift() {
var dt=Browser.inputBox("Datum (YYMMDD) eingeben");
if (dt=="cancel" || dt.length !=6) return("Input "+dt);
var f1=GetFL(n1,0);
if (f1=="cancel") return("F1 cancel");
Logger.log(f1);
var Rx=f1.getSheetByName("Sheet1").getRange("B9").getValue();
f1.rename(n0+dt);
Logger.log(Rx);
Logger.log(f1.getName()+" finished");
var f2=GetFL(n2,1);
if (f2=="cancel") return("F2 cancel");
Logger.log(f2);
f2.getSheetByName("Sheet1").getRange("B7").setValue(Rx);
Logger.log(f1.getName()+" finished");
return("OK");
};
function GetFL(name,typ) {
Logger.log(name);
var fx = DocsList.find(name);
Logger.log(name+" = "+fx.length);
if (fx.length != 1) return("cancel");
if (typ==1) {
var fy=fx[0].makeCopy(n1);
} else {
var fy=fx[0];
};
fy=SpreadsheetApp.openById(fy.getId());
Logger.log(fy);
return (fy);
};
从脚本编辑器中运行
onOpen
,将被视为任何其他脚本。将其作为简单触发函数运行将不允许访问DocsList API,因为它不能匿名运行。即使您已授权脚本以自己的身份运行,简单触发器也会匿名运行,某些API不允许这样做
在这种情况下,onOpen
(和onEdit
)会自动失败
它不会为您解决这个问题,但是可以在中找到解释
当你第一次遇到这个问题时,它可能会令人沮丧/困惑,但即使它意味着从菜单命令或按钮运行脚本,也有办法解决:两者都会在脚本上授予用户身份。作为乔纳森答案的补充,你可以使用可安装的
onOpen
触发器,而不是简单的触发器。为避免混淆,只需给这个函数取另一个名称,例如IonOpen()
或其他任何名称。。。可安装触发器没有Jonathon提到的限制。
请参见上的文档尝试对代码进行注释。这可能有助于您理解itI我同意ScampMichael的观点,尽管回答这个问题不需要了解它在做什么,只需要了解它调用的API。