2

いくつかのメニューを追加し、次のように onOpen() でカスタムのインストール可能な onEdit トリガーを有効にしました。すべてのメニューが期待どおりに設定されていますが、カスタム インストール可能な onEdit トリガーが設定されていません。トリガーを削除および作成するためにそれらの行を実行しないようです。ここで何が起きてるの?ソリューション?

function onOpen() {

  var ass = SpreadsheetApp.getActiveSpreadsheet();

  ass.addMenu("TriggerOn", [null, {name: "Disable OnEditTrigger", functionName: "disableOnEditTrigger"}]);
  ass.addMenu("AlertOn", [null, {name: "Alert Off", functionName: "alertOff"}]);
  ass.addMenu("EmailBodyHtml", [null, {name: "TextBody", functionName: "textbody"}]);
  ass.addMenu("Setup", [null, {name: "MasterTemplate", functionName: "setMasterTemplate"}]);

  //delete all previous triggers
  var allTriggers = ScriptApp.getScriptTriggers();
  // Loop over all triggers
  for(var i=0; i < allTriggers.length; i++)
      ScriptApp.deleteTrigger(allTriggers[i]);

  // Create onEdit trigger using the Spreadsheet
  var onEditTrigger = ScriptApp.newTrigger("myOnEdit")
      .forSpreadsheet(ass)
      .onEdit()
      .create();

  ScriptProperties.setProperty("alert", "1");
  ScriptProperties.setProperty("emailbody", "htmlbody");

}
4

2 に答える 2

1

他の応答を裏付けるために、単純なトリガー (onEdit や onOpen など) はユーザーの承認なしで実行されるため、可能なアクションのセットが限られていることが説明されているトリガーに関するドキュメントを読むことをお勧めします...トリガーは(そのようなトリガーで試したことはありませんが)承認する必要があるため、可能なアクションを超えています。確認したい場合は、手動で実行し、スクリプトが承認を要求するかどうかを確認します (または、既に承認を行っている可能性があるため、別のユーザー アカウントで試してください)。

関連するサービスを承認するようにユーザーに求めるインストール可能な onOpen トリガーを作成できます。この場合、混乱を避けるために別の名前を付けることができます (この場合、名前は重要ではありませんが)。

それが十分に明確であることを願っています。

于 2012-11-20T14:38:08.417 に答える
0

コードを try-catch でチェックする (そして Browser.MsgBox にダンプする) ことから、Apps Scripts によって課せられたセキュリティ制限にぶつかっているように見えます。"You do not have permission to call getScriptTriggers"- 同様の問題がnewTrigger、または基本的に に存在するScriptAppようです。これは、ここの制限事項では特に言及されていませんが、これが問題である可能性が高いと思われます。このトリガーをスクリプトにハードコードするか、別のメニュー項目を介して作成する必要がある場合があります。

于 2012-11-20T14:00:16.000 に答える