web-dev-qa-db-ja.com

Appsスクリプト使用時のクロススプレッドシートインポートでの権限の問題の修正

スプレッドシートに関連付けられたAppsスクリプトで関数を作成しました:

function importNotes() {
      s = SpreadsheetApp.openById('spreadsheet-key').getRange('F2').getNotes();
      return s;
}

関数が添付されているスプレッドシートは、メモの読み取り元ではないことに注意してください。両方とも私が所有しています。

デバッガーで関数をステップスルーすると、機能します。たとえば、ローカル変数を[['This is a note']]に設定します。 (もちろん、実際のスプレッドシートキーを使用します。)

これを関連するスプレッドシートのセルに配置すると:

=importNotes()

エラーが発生します:

You do not have permission to perform that action. (line 3).

キャッシングを無効にしてスプレッドシートをリロードするために関数の名前を変更しようとしましたが、エラーが発生し続けます。

許可の問題を修正するにはどうすればよいですか?

2
Ellen Spertus

これは、カスタム関数に課される制限の1つです。ユーザーのファイルへのアクセスなど、承認を必要とするタスクを実行できません。 ドキュメント から:

他のほとんどの種類のAppsスクリプトとは異なり、カスタム関数はユーザーに個人データへのアクセスの許可を求めることはありません。したがって、個人データにアクセスできないサービス、特に次のサービスのみを呼び出すことができます。

[SpreadsheetAppを含むnotを含むリスト]

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

おそらくあなたのケースにより適した別のソリューションは、関数でスプレッドシートでImportRangeを使用し、それらのセルにアクセスすることです。カスタム関数は、getSheetByName、getRangeなどの Spreadsheet serviceの読み取り専用メソッドにアクセスできます。

4
user79865