質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.36%
Google API

Googleは多種多様なAPIを提供していて、その多くはウェブ開発者向けのAPIです。それらのAPIは消費者に人気なGoogleのサービス(Google Maps, Google Earth, AdSense, Adwords, Google Apps,YouTube等)に基づいています。

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

Q&A

1回答

8710閲覧

スクリプトで「GoogleJsonResponseException: 次のエラーが発生し、drive.files.copy の呼び出しに失敗しました: User rate limit exceed」

mattsuncaca

総合スコア2

Google API

Googleは多種多様なAPIを提供していて、その多くはウェブ開発者向けのAPIです。それらのAPIは消費者に人気なGoogleのサービス(Google Maps, Google Earth, AdSense, Adwords, Google Apps,YouTube等)に基づいています。

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

0グッド

1クリップ

投稿2021/12/23 04:01

編集2021/12/23 04:34

前提・実現したいこと

Google Spreadsheetにて、
「特定のフォルダから、特定の名前のcsvファイルを探し、Spreadsheet形式に変換し、内容をシートに転記する」
というスクリプトを組みました。

発生している問題・エラーメッセージ

GoogleJsonResponseException: 次のエラーが発生し、drive.files.copy の呼び出しに失敗しました: User rate limit exceeded at PasteResult(result貼り付け:23:52) at allFunctions(全部:6:3) at zenbu(全部(ライブラリ):2:17)

重要そうな前提として、上記は自分の環境でしか起こらないようで、
他2人はそれぞれの環境で何度も実行もらいましたが、一度も下記エラーにはなりませんでした。

■上記各関数の説明
PasteResult(result貼り付け:23:52)
└ソースコードです。エラーはここで起こっています。
allFunctions
└こちらで他のfunctionと一つにまとめて、1回のアクションで実行できるようにしてます。
zenbu
└上記はライブラリ化しているので、Activeなスプシで実行するのはこちらのfunctionです。

該当のソースコード

エラー箇所は「スプシ形式に変換したコピー元データのシートから、すべての値を取得」のコメントアウトがある辺りだと思います。
「Drive.Files.copy」はここでしか使っていません。
試行錯誤中でコメントアウト多いですが・・・

GoogleAppScript

1function PasteResult() { 2 //現在のスプシのidと、貼り付け対象のシートを取得 3 const Spreadsheet = SpreadsheetApp.getActiveSpreadsheet(); 4 const thisSsId = Spreadsheet.getId(); 5 Logger.log(thisSsId); 6 const pasteSheet = Spreadsheet.getSheetByName('実績'); 7 8 //コピー元データのExcelファイルを名前から取得 9 const folder = DriveApp.getFolderById('1Pbjckajhkh51EUBgOHDlMTJBM');//ロ―データフォルダのID 10 const files = folder.getFilesByName('result_' + thisSsId + '.csv'); 11 const file = files.next(); 12 Logger.log(file); 13 14 //おそらく、Excelからスプシへの変換で必要な操作(ネット上のコード) 15// options = { 16// title : file.getName(), 17// mimeType: MimeType.GOOGLE_SHEETS, 18// parents : [{ id: folder.getId() }] 19// } 20 21 //スプシ形式に変換したコピー元データのシートから、すべての値を取得 22// const newSs = SpreadsheetApp.openById(Drive.Files.insert(options, file.getBlob()).id); //ExcelをSSに変換し取得 23const newSs = SpreadsheetApp.openById(Drive.Files.copy({parents: [{id: folder.getId()}]}, file.getId(), {convert: true}).id) 24 25 // 変換後のスプレッドシートのタイムゾーンをAsia/Tokyoに設定しなおす。 26 newSs.setSpreadsheetTimeZone("Asia/Tokyo"); 27 const newSheet = newSs.getActiveSheet(); 28 const values = newSheet.getDataRange().getValues(); 29 Logger.log(values[1][0]); 30 31 32 //現在のスプシの貼り付け先シートに、コピーした範囲を貼り付け 33 pasteSheet.getRange(1, 2, values.length, values[0].length).setValues(values); 34 35 //スプシ形式に変換したファイルをゴミ箱に移動 36 //DriveAppクラスからファイルIDでファイル一意に取得する 37 const fileData = DriveApp.getFileById(newSs.getId()); 38//IDから取得したファイルをゴミ箱のフラグをtrueにする 39 const getData = fileData.setTrashed(true); 40}

試したこと

エラー箇所はおそらく下記だと思うのですが、関連するフォルダ内には最大100ファイル程度しかなく、User rate limit exceededしそうな感じはしない気がしてます・・・。

GoogleAppScript

1const newSs = SpreadsheetApp.openById(Drive.Files.copy({parents: [{id: folder.getId()}]}, file.getId(), {convert: true}).id)

検索しても同様の事象を見つけられず、非常に困っています。
知見のある方のお力を借りたいです。
何卒、よろしくおねがいします!

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

Google APIには
・プロジェクト毎に100秒間に500リクエストまで
・ユーザー毎に100秒間に100リクエストまで
という制限があります。これを超えているのではないでしょうか。

投稿2021/12/23 04:39

itagagaki

総合スコア8402

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問