0

Script-Editor: 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

onOpenJonathon の回答を補完するものとして、単純なトリガーの代わりにインストール可能なトリガーを使用できます。混乱を避けるために、この関数に別の名前を付けてくださいIonOpen()コンテナ固有のインストール可能なトリガーの使用に関するドキュメントを参照してください

于 2013-02-21T22:19:22.480 に答える
0

スクリプト エディタから実行onOpenすると、他のスクリプトと同様に扱われます。これを単純なトリガー関数として実行すると、これは匿名で実行できないため、DocsList API へのアクセスは許可されません。スクリプトの実行を承認した場合でも、単純なトリガーは匿名で実行され、特定の API ではこれが許可されません。

この場合onOpen、 (and onEdit) は黙って失敗します。

これは修正されませんが、説明はGAS ドキュメントにあります。

これに最初に遭遇したときはイライラしたり、戸惑ったりする可能性がありますが、メニュー コマンドまたはボタンからスクリプトを実行することを意味する場合でも回避する方法があります。どちらもスクリプトでユーザーの ID を付与します。

于 2013-02-21T21:40:44.380 に答える