私の機能には、ドキュメントへのメニューとトーストの追加が含まれます。トリガー(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);
}
ありがとう、
これは古い投稿ですが、私はこの問題を抱えており、私の場合に正しく機能しなかった理由を見つけました。スクリプトファイルの先頭に、いくつかの承認を必要とし、スクリプトが正しく実行されない変数がありました。 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");
...}
「シート」が定義されていないことが問題のようです。そのため、トーストが失敗します。
私の場合、関数の外部にSpreadsheetApp.openById()
ではなくSpreadsheetApp.getActiveSpreadsheet()
でシートを開く変数があったため、onOpenは機能しませんでした。 onOpenは、開いているシートがスクリプトにバインドされている場合でも、openById()
では機能しないと思います。 onOpen()
は、関数外のこの種の変数では機能しません。
_var sheet = SpreadsheetApp.openById("1b_PQD...").getSheetByName("demos")
_
スクリプトがシートにバインドされている場合は、getActiveSpreadsheet()
関数を使用してこの問題を解決できます。それ以外の場合は、openById()
呼び出しを関数に入れることで解決できます。