Я застрял. Я надеюсь, что кто-то нашел способ создать кучу PDF-файлов из Google Таблиц.
Я запускаю тот же отчет для списка компаний и создаю снимки каждого отчета в формате PDF, которые сохраняются на Диске. Я получаю ошибку 429 каждый раз, с той лишь разницей, что сколько файлов PDF я сгенерировал до получения ошибки.
Количество сгенерированных PDF-файлов напрямую зависит от того, как долго я использовал функцию Utilities.sleep
, но все же составляет лишь часть от общего количества отчетов (т.е. больше сна = немного больше PDF-файлов, созданных до ошибки).
Я сделал несколько попыток использовать экспоненциальную отсрочку, но мои попытки были тщетными.
Приветствуются любые идеи о том, как избежать следующих 429:
Request failed for docs.google.com/a/[redacted]/spreadsheets/d/[redacted]/… returned code 429. Truncated server response: <!DOCTYPE html><html lang="en"><head><meta name="description" content="Web word processing, presentations and spreadsheets"><meta name="viewport" c... (use muteHttpExceptions option to examine full response
Вот соответствующий код:
var foldersave = DriveApp.createFolder('New Reports').getId()
var request = {method:"GET",headers:{"authorization":"Bearer "+ ScriptApp.getOAuthToken(), muteHttpExceptions: true}};
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getActiveSheet();
var gid = sheet.getSheetId();
var values = ss.getActiveSheet().getRange(2, 8, sheet.getLastRow()-1, 1).getValues();
for (var i = 0; i < values.length; i++) {
//set up the new report
var org = sheet.getRange(5,4);
org.setValue(values[i])
//set the PDF parameters
var pdfOpts = '&size=0&fzr=false&portrait=true&fitw=true&gridlines=false&printtitle=false&sheetnames=false&pagenum=CENTER&attachment=false&gid='+gid;
var printRange = '&c1=0' + '&r1=0' + '&c2=4' + '&r2=42';
var url = ss.getUrl().replace(/edit$/, '') + 'export?format=pdf' + pdfOpts + printRange;
//create the PDF
var response = UrlFetchApp.fetch(url, request).getBlob().setName(values[i] + ".pdf");
var dir = DriveApp.getFolderById(foldersave);
var file = dir.createFile(response);
Utilities.sleep(5000);
}