0

脚本编辑器:使用 onOpen 函数编写脚本(见下文)。使用脚本编辑器启动时,它可以正常工作。当打开电子表格时启动时,我得到了 stmt 31“Logger.log(name)”的日志,没有其他任何事情发生。为什么?

这是完整的脚本:

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);
};
4

2 回答 2

2

作为对 Jonathon 答案的补充,您可以使用可安装的onOpen触发器而不是简单的触发器。只需给这个函数另一个名称以避免混淆,例如IonOpen()或其他什么......可安装的触发器没有 Jonathon 提到的限制。请参阅有关使用容器特定的可安装触发器的文档

于 2013-02-21T22:19:22.480 回答
0

从脚本编辑器运行onOpen将视为任何其他脚本。将它作为一个简单的触发函数运行将不允许访问 DocsList API,因为它不能匿名运行。即使您已授权脚本以您的身份运行,简单的触发器也会匿名运行,并且某些 API 不允许这样做。

在这种情况下onOpen(and onEdit) 默默地失败。

它不会为您解决这个问题,但可以在GAS 文档中找到解释。

当您第一次遇到这种情况时可能会感到沮丧/困惑,但是即使这意味着从菜单命令或按钮运行脚本,也有一些方法可以解决它:两者都在脚本上赋予用户身份。

于 2013-02-21T21:40:44.380 回答