web-dev-qa-db-ja.com

関数onOpen()が実行されていません

私の機能には、ドキュメントへのメニューとトーストの追加が含まれます。トリガー(onOpen)も設定されていることを確認しました。これは、ユーザーが[ツール]、[スクリプトマネージャー]、[実行]に移動したときにのみ機能します。あまりにも多くのバックグラウンドを持つユーザーが多すぎて、これを行う方法を知ることは期待できません。なぜ機能しないのですか? (Chromeを使用)

function onOpen()
{
  var menus = [{name: "Advance in Workflow", functionName:"sendEmail"}];

     SpreadsheetApp.getActiveSpreadsheet().addMenu("Auto Advance FG Workflow", menus);

  //sheet.toast(Notify/Remind users);
   sheet.toast("While you are here we kindly ask that you do not add, modify or remove     any columns.","Welcome - " + username,8);
 }

ありがとう、

16
user1817058

私は同じ問題を抱えていました。

Googleがスクリプトのある種のキャッシュを作成することがあることに気づきました(私は「テスト」スクリプトを持っていて、通常はその内容を変更しますが、スクリプトが実行されない場合もあります)。

したがって、onOpen()が機能しないことを解決するために私が行ったことは、関数名を変更し、トリガーを手動で追加することでした。

Go to "Resources -> Current script's triggers…"

「リソース->現在のスクリプトのトリガー…」に移動します。

Choose the function to run on open

開いた状態で実行する関数を選択します

ここは魅力のように機能しました!

更新された場所情報: from tool bar または from menu bar

その後

trigger select

33
Eduardo Russo

これは古い投稿ですが、私はこの問題を抱えており、私の場合に正しく機能しなかった理由を見つけました。スクリプトファイルの先頭に、いくつかの承認を必要とし、スクリプトが正しく実行されない変数がありました。 OPがvar username = Session.getActiveUser().getUsername();と呼ばれているのを見ました(これには承認が必要であり、それが原因である可能性があります)。

例:このコードは機能しません:

function onOpen(){
  SpreadsheetApp.getUi()
  .createMenu("Exportation")
  .addItem("Lancer l'exportation", "exportationMenu")
  .addToUi();
}
var stConsCons= SpreadsheetApp.openById(sgcid).getSheetByName("Consultant");

しかし、これはうまくいきます:

function onOpen(){
  SpreadsheetApp.getUi()
  .createMenu("Exportation")
  .addItem("Lancer l'exportation", "exportationMenu")
  .addToUi();
}

function whatever(){
  var stConsCons= SpreadsheetApp.openById(sgcid).getSheetByName("Consultant");
...}
10
Harold

私の場合、スクリプトを完全に停止しなかったものの、メニューの表示を停止したという参照エラーがありました。

スクリプトでデバッグを実行した後でのみ、そのエラーを検出できました。

Google script debug option

2
PowerAktar

「シート」が定義されていないことが問題のようです。そのため、トーストが失敗します。

0
Eric Koleda

私の場合、関数の外部にSpreadsheetApp.openById()ではなくSpreadsheetApp.getActiveSpreadsheet()でシートを開く変数があったため、onOpenは機能しませんでした。 onOpenは、開いているシートがスクリプトにバインドされている場合でも、openById()では機能しないと思います。 onOpen()は、関数外のこの種の変数では機能しません。

_var sheet = SpreadsheetApp.openById("1b_PQD...").getSheetByName("demos")
_

スクリプトがシートにバインドされている場合は、getActiveSpreadsheet()関数を使用してこの問題を解決できます。それ以外の場合は、openById()呼び出しを関数に入れることで解決できます。

0
Rivers Cuomo