2017-08-03 18 views
1

私はUrlFetchApp.fetchメソッドを100 + URLの配列で正しく動作させる方法を見つけようとしています。スクリプト。私はエラー429(あまりにも多くの要求)をヒットするか、繰り返しの間に何らかの睡眠を入れた場合、URLFetchAppの時間は、各呼び出しが8秒以上かかるまで持続的に増加し、6分のタイムアウト制限に達しました。ここに私のコードがあります。どんな入力も感謝します。Google Appsスクリプト、多数のURLを持つUrlFetchApp.fetchを使用

function migrateSheetsToFiles() { 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var ssId = ss.getId(); 
    var parentfolder = DriveApp.getFileById(ssId).getParents().next(); 
    var mySheets = ss.getSheets(); 
    var fileID = ss.getId(); 
    var FetchArray = []; 
    var sheetnameArray = []; 
    var responseArray = []; 

    var params = { 
     method : "GET", 
     headers : {"authorization": "Bearer " + ScriptApp.getOAuthToken()} 
    }; 

    for(var i=0; i<mySheets.length; i++){ 
     var currentSheet = mySheets[i]; 
     var sheetname = currentSheet.getName(); 
     sheetnameArray[i] = sheetname; 
     var currentSheetId = currentSheet.getSheetId(); 
     var url = "https://docs.google.com/spreadsheets/d/" + fileID + "/export?format=xlsx&gid=" + currentSheetId; 
     FetchArray[i] = url; 
    } 

    for (i=0; i<FetchArray.length; i++) { 
     responseArray = UrlFetchApp.fetch(FetchArray[i], params); 
     Utilities.sleep(1000); 
    } 

    for (i=0; i<FetchArray.length; i++) { 
     parentfolder.createFile(responseArray[i]).setName(sheetnameArray[i]); 
    } 
} 

答えて

1

スプレッドシートからシートを個々のシートに分割し、各シートを1つのスプレッドシートとして作成すると思われます。これについての私の理解は正しいですか?このために、以下の方法はどうですか?

  1. mySheetsのデータを区切った後、トリガーを使用して各データからスプレッドシートを作成します。
    • と思います。しかし、仕事を終えるためには時間が必要です。
  2. SpreadsheetApp及び/又はSheets API v4を用いUrlFetchApp.fetch()ずにスプレッドシートからシートを分離します。
    • 制限エラーが発生するかどうかわかりません。しかし、これがうまくいくならば、1回の作業で作業を終了することができます。

これはあなたのために有用ではない場合、私はごめんなさい。

関連する問題