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

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

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

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

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

2回答

6733閲覧

gas:同時呼び出しの数が多すぎます

退会済みユーザー

退会済みユーザー

総合スコア0

Google Apps Script

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

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2018/12/19 09:10

google app scriptで、PHPを作動させDBからデータをDL 、スプレッドシートに書き込みをさせていますが
record.setValues(new Array(data[ii])); の行に対して「同時呼び出しの数が多すぎます」という
エラーがでます。
毎回出るエラーではなく、1時間に1回の時間設定トリガーで動かしているうち1日に数回分(ランダム)が
このエラーになります。

解決策をご存知の方がいらっしゃいましたらご教示いただきたいです。
よろしくお願いします。

function load_csv(){
var url = 'https://';
var sheet_name = 'master';
var csv_txt = download_csv(url);
var data = CSVToArray(csv_txt, ',');
var book = SpreadsheetApp.getActiveSpreadsheet();
var sheet = book.getSheetByName(sheet_name);
var record;
for (var ii=0; ii < data.length; ii++){
record = sheet.getRange(ii+2, 3, 1, data[ii].length);
record.setValues(new Array(data[ii]));
}
}

function download_csv(url) {
var url001 = 'https://';
var user = 'user';
var password = 'pass';
var options = {
"headers" : {"Authorization" : " Basic " + Utilities.base64Encode(user + ":" + password)}
};
var res = UrlFetchApp.fetch(url001, options);
var content = res.getContentText('Shift_JIS');
return content.toString();
}

function CSVToArray( strData, strDelimiter ){

strDelimiter = (strDelimiter || ",");

var objPattern = new RegExp(
(
"(" + strDelimiter + "|\r?\n|\r|^)" +

"(?:\"([^\"]*(?:\"\"[^\"]*)*)\"|" + "([^\"\" + strDelimiter + "\r\n]*))" ), "gi"

);

var arrData = [[]];

var arrMatches = null;

while (arrMatches = objPattern.exec( strData )){

var strMatchedDelimiter = arrMatches[ 1 ]; if ( strMatchedDelimiter.length && (strMatchedDelimiter != strDelimiter) ){ arrData.push( [] ); } if (arrMatches[ 2 ]){ var strMatchedValue = arrMatches[ 2 ].replace( new RegExp( "\"\"", "g" ), "\"" ); } else { var strMatchedValue = arrMatches[ 3 ]; } arrData[ arrData.length - 1 ].push( strMatchedValue );

}

return( arrData );
}

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

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

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

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

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

guest

回答2

0

排他制御したらどうかな、知らんけど。
排他制御でGoogle Apps Scriptを安全に実行 ???? officeの杜

setValues()の呼び方を工夫したらどうかな、知らんけど。
Google Apps Scriptのスプレッドシート読み書きを格段に高速化をする方法

投稿2018/12/19 09:29

編集2018/12/19 09:31
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

退会済みユーザー

退会済みユーザー

2018/12/25 00:19

ご回答ありがとうございます。参考にしてみます!
guest

0

ベストアンサー

Quotaのどれかにひっかかっているのだと思いますが、検証は難しいと思います。

ですが、

javascript

1for (var ii=0; ii < data.length; ii++){ 2record = sheet.getRange(ii+2, 3, 1, data[ii].length); 3record.setValues(new Array(data[ii])); 4}

のところを

javascript

1sheet.getRange(2, 3, data.length, data[0].length).setValues(data);

とやればforでループしなくても一回でdataが全部書けるので、dataの行数が多いなら、格段にアクセス回数や処理時間を短縮できるので、改善するのではないでしょうか?
(改善したかどうかも何日か様子を見ないといけないでしょうけど)

投稿2018/12/19 09:25

papinianus

総合スコア12705

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

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

退会済みユーザー

退会済みユーザー

2018/12/25 00:19

ご回答ありがとうございます。試してみます!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問