我被困住了。我希望有人想出一种方法来生成一堆PDF 的Google Sheets。
我为公司列表运行相同的报告,并为保存在 Drive 中的每个报告生成 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);
}