Скрипт Google Apps, использующий UrlFetchApp.fetch с большим количеством URL-адресов

Я пытался выяснить, как заставить метод 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]);
    }
}

person Matthew Pagliaro    schedule 03.08.2017    source источник


Ответы (1)


Кажется, что вы хотите разделить листы из электронной таблицы на отдельные листы и создать каждый лист как одну электронную таблицу. Я правильно понимаю это? Для этого как насчет следующих методов?

  1. After it separated the data of mySheets, it creates spreadsheets from each separated data using a trigger.
    • I think that it is possible. But the time is required to finish the work.
  2. It separates sheets from spreadsheet without UrlFetchApp.fetch() using SpreadsheetApp and/or Sheets API v4.
    • I don't know whether the limitation error occurs. But if this works, it can finish the work by only one time running.

Если это вам не пригодится, извините.

person Tanaike    schedule 03.08.2017