1

我一直在试图弄清楚如何让 UrlFetchApp.fetch 方法在一个包含 100 多个 url 的数组上正常工作,我需要它来获取脚本。我遇到错误 429(请求太多),或者如果我在迭代之间设置了任何类型的睡眠,URLFetchApp 所花费的时间一直在增加,直到每次调用需要 8 秒以上并且我达到了 6 分钟的超时限制。这是我现在的代码。任何输入将不胜感激。

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]);
    }
}
4

1 回答 1

1

您似乎想将电子表格中的工作表分离为单独的工作表,并将每个工作表创建为一个电子表格。我对此的理解正确吗?为此,以下方法怎么样?

  1. 在它分离 的数据后mySheets,它使用触发器从每个分离的数据创建电子表格。
    • 我认为这是可能的。但是完成这项工作需要时间。
  2. UrlFetchApp.fetch()它在不使用SpreadsheetApp和/或的情况下将工作表与电子表格分开Sheets API v4
    • 不知道会不会出现限制错误。但如果这行得通,它只需运行一次即可完成工作。

如果这对您没有用,我很抱歉。

于 2017-08-03T23:31:15.317 回答