31

問題: スクリプトを実行すると、Google から次のように表示されます。

openById を呼び出す権限がありません

別の Google スプレッドシートからスクリプトをコピーし、target_ssKey変数のセル参照を変更し、ソース スプレッドシートとターゲット スプレッドシートの両方で適切なサイズの名前付き範囲を作成しました。

Google Apps Script のドキュメントには、動作しない理由については何も書かれていません。

https://developers.google.com/apps-script/reference/spreadsheet/spreadsheet-app#openById%28String%29

別の Google Apps Script のドキュメントによると、カスタム メニューから呼び出すので、うまくいくはずです。

https://developers.google.com/apps-script/guides/sheets/functions#using_apps_script_services

上記の 2 番目のリンクには、次のように記載されています。

カスタム関数がエラー メッセージをスローする場合X サービスを呼び出す権限がありません。、サービスにはユーザー認証が必要なため、カスタム機能では使用できません。

上記以外のサービスを使用するには、カスタム関数を記述する代わりに、Apps Script 関数を実行するカスタム メニューを作成します。メニューからトリガーされる機能は、必要に応じてユーザーに承認を求めるため、すべての Apps Script サービスを使用できます。

関数を「カスタム関数」プロジェクトに入れ、次に「アドオン」プロジェクトに入れようとしましたが、それでも同じエラー メッセージが表示されます。

私が間違っていることと、これを機能させる方法についてのアイデアはありますか?

これが私の正確なコードです:

function exportData_SStoSS() {
    //  Get the source data.
    var source_ss = SpreadsheetApp.getActiveSpreadsheet();
    var data = source_ss.getRangeByName("exportData").getValues();

    //  Identify the target.
    var controls_sh = source_ss.getSheetByName("Controls");
    var target_ssKey = controls_sh.getRange('C2').getValue();
    var target_ss = SpreadsheetApp.openById(target_ssKey);

    //  Paste the data to the target.
    target_ss.getRangeByName("importData").setValues(data);
};
4

5 に答える 5

13

問題の原因を解決すると思われるこの公式メモを見つけました。

関数がカスタム関数、つまりシート自体で通常のスプレッドシート関数のように使用できる関数である場合、アクセスが制限され、他のスプレッドシートを開くことができません。

ただし、同じスクリプトで、メニュー ボタンなどから他のスプレッドシートを開くことができます。

リンク: developers.google.com のドキュメント

于 2017-10-10T07:28:28.870 に答える