[解決済み] Google Sheets、"リクエストに有効なAPIキーが不足しています"
質問
を使おうとしています。
Google Sheets API
. 問題は、googleスプレッドシートでスクリプト関数を呼び出すと、以下のエラーが発生することです。
sheets.spreadsheets.values.get への API コールに失敗し、エラーが発生しました。The request is missing a valid API key. (というエラーで失敗しました(5行目)。
ここで
line 5
をスクリプトにすると、次のようになります。
var values = Sheets.Spreadsheets.Values.get(spreadsheetId, rangeName).values;
と
spreadsheetId
と
rangeName
は最初の行で定義されています。
APIキーをどこにもコピーしていないことが問題なのかもしれませんが、どこでどうすればいいのか本当にわかりません。
を使って関数を呼び出すだけです。
= function()
.
解決方法は?
のようなカスタム関数でSheets APIを使用する場合、Sheets APIを使用することができます。
=myFunction()
をセルに入れると、このようなエラーが発生します。カスタム関数を実行すると
ScriptApp.getOAuthToken()
は
null
. これが主な原因だと思います。そして、残念ながら、これが仕様であると思います。この問題を回避するために、2つの回避策を提案したいと思います。
回避策1:
カスタム関数でSpreadsheet Servicesの一部を使用することができます。そのため、これを利用すると
var values = Sheets.Spreadsheets.Values.get(spreadsheetId, rangeName).values;
. あなたのスクリプトの場合
openById()
は使用できません。そこで、スクリプトは次のようになります。
サンプルスクリプトです。
function customFunc() {
var rangeName = "#####"; // Please set this.
var sheet = SpreadsheetApp.getActiveSpreadsheet();
var values = sheet.getRange(rangeName).getValues();
return values;
}
回避策2
Sheets APIを使用する場合、アクセストークンが必要です。ただし、Advanced Google Servicesの内部ではアクセストークンが自動的に使用されるため、Sheets APIのエンドポイントに直接リクエストする必要がある。この場合の問題点として
ScriptApp.getOAuthToken()
がカスタム関数で実行されます。
null
が返されます。これを避けるために、メソッドとして、PropertiesServiceを使って、アクセストークンを直接カスタム関数に渡しています。サンプルフローは以下の通りです。
-
Spreadsheetを開くと、OnOpenトリガでPropertiesServiceにアクセストークンを投入する。
-
これを利用する場合は、OnOpenトリガーを
onOpenFunc()
をサンプルスクリプトに追加してください。
-
これを利用する場合は、OnOpenトリガーを
- カスタム関数を実行すると、PropertiesServiceが取得したアクセストークンがSheets APIを利用するために使用されます。
これにより、カスタム関数内でSheets APIを使用することができます。
サンプルスクリプトです。
// Please install OnOpen trigger to this function.
function onOpenFunc() {
PropertiesService.getScriptProperties().setProperty("accessToken", ScriptApp.getOAuthToken());
}
function customFunc() {
var spreadsheetId = "#####"; // Please set this.
var rangeName = "#####"; // Please set this.
var accessToken = PropertiesService.getScriptProperties().getProperty("accessToken");
var url = "https://sheets.googleapis.com/v4/spreadsheets/" + spreadsheetId + "/values/" + rangeName;
var res = UrlFetchApp.fetch(url, {headers: {"Authorization": "Bearer " + accessToken}});
var obj = JSON.parse(res.getContentText());
var values = obj.values;
return values;
}
- アクセストークンの有効期限は1時間です。このサンプルスクリプトでは、PropertiesServiceを使用しています。この場合、Spreadsheetを開いてから1時間が経過すると、アクセストークンを使用することができなくなる。アクセストークンを継続的に使用したい場合は、時間駆動型トリガーを用いて更新することも可能です。
注意事項
- Sheets APIを使用する場合は、APIコンソールでSheets APIを有効にしてください。
参考文献
これらの回避策があなたの望むものでなかったなら、申し訳ありません。
関連
-
[解決済み] スクリプト関数が見つかりません: doGet
-
[解決済み] Googleフォームの隠しフィールド
-
[解決済み] Google Apps Script Error - そのアクションを実行するには認証が必要です。
-
[解決済み] onEditのシンプルなトリガーがトリガーされることがないようです。
-
[解決済み] G Suiteアドオンがドライブへの接続を拒否している?drive.google.com refused to connect" エラーの解決方法は?
-
[解決済み] Google Sheets、"リクエストに有効なAPIキーが不足しています"
-
[解決済み] セルに値を設定するために正しい範囲を取得する方法は?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] スクリプト関数が見つかりません: doGet
-
[解決済み] Googleフォームの隠しフィールド
-
[解決済み] Google Apps Script Error - そのアクションを実行するには認証が必要です。
-
[解決済み] onEditのシンプルなトリガーがトリガーされることがないようです。
-
[解決済み] G Suiteアドオンがドライブへの接続を拒否している?drive.google.com refused to connect" エラーの解決方法は?
-
[解決済み] Google Sheets、"リクエストに有効なAPIキーが不足しています"
-
[解決済み] セルに値を設定するために正しい範囲を取得する方法は?