4

Google スプレッドシート用のスクリプトを作成しました。このスクリプトは、スプレッドシートのカスタム メニュー項目で説明されているように、新しいメニュー項目を追加するだけです。次に、このスクリプトを Web アプリとして展開し、アプリをインストールするすべてのユーザーが新しいメニュー項目を表示できるようにします。そして、私はこの時点で立ち往生しています。

私が理解しているように、スクリプトを Web アプリとしてデプロイすると、onOpen 関数はその意味を失います。そのため、doGet 内で onOpen イベントのカスタム トリガーを作成し、それに myOnOpen ハンドラをアタッチし、myOnOpen 内でメニュー項目を追加しましたが、項目が表示されません。

これが私のコードです:

function doGet() {
    var newSheet = SpreadsheetApp.create("new sheet");
    var newId = newSheet.getId();
    ScriptProperties.setProperty('newId', newId); 

    ScriptApp.newTrigger("myOnOpen")
        .forSpreadsheet(newId)
        .onOpen()
        .create();
};

function myOnOpen() {
    var newId = ScriptProperties.getProperty('newId');
    var sheet = SpreadsheetApp.openById(newId);

    var entries = [ { name : "Show bingo", functionName : "Bingo" } ];
    sheet.addMenu("My Menu", entries);
};

function Bingo() {
    Browser.msgBox("Bingo!");
};

そのため、アプリをインストールしたユーザーが「新しいシート」スプレッドシートを開くと、「マイ メニュー」が表示されません。ここで何が間違っていますか?メニュー項目が表示されないのはなぜですか? 最終的には、追加のメニューとダイアログで Google スプレッドシート UI を拡張する Web アプリを作成したいと考えています。

どんなアドバイスでも大歓迎です。ありがとう!

4

1 に答える 1

0

スクリプトを Web アプリとしてデプロイすると、Web アプリのユーザーには、doGet 関数から「返された」コンテンツのみが表示されます。UiAppまたはHtmlServiceを使用してコンテンツを作成し、このコンテンツを返してブラウザーでレンダリングすることができます。新しいメニュー項目はスプレッドシートに添付されるため、ユーザーがスプレッドシート自体にアクセスしたとき (onOpen トリガーをアクティブにするなど) にのみ表示されます。

于 2012-12-17T19:49:35.837 に答える