2017-08-03 358 views
1

我一直在試圖弄清楚如何讓UrlFetchApp.fetch方法在一個100 + url的數組上正確工作,我需要它來獲取一個腳本。我要麼出現錯誤429(太多的請求),要麼在迭代之間放置任何類型的睡眠,URLFetchApp需要的時間持續增加,直到每次調用需要8+秒以上,並且達到6分鐘的超時限制。這是我現在的代碼。任何輸入將不勝感激。Google Apps腳本,使用UrlFetchApp.fetch與大量的URL

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. 在將mySheets的數據分開後,它使用觸發器從每個分離的數據中創建電子表格。
    • 我認爲這是可能的。但是,完成這項工作需要時間。
  2. 它使用SpreadsheetApp和/或Sheets API v4分離電子表格片而不UrlFetchApp.fetch()
    • 我不知道是否發生限制錯誤。但如果這樣做,它可以完成一次運行的工作。

如果這不是對您有用,我很抱歉。