在Google表格中,我想将工作簿中的每个表格另存为单独的PDF。我在Google文档帮助论坛上找到了以下脚本
function saveSheetsAsPDF() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var url = ss.getUrl().replace(/edit$/,'');
var parents = DriveApp.getFileById(ss.getId()).getParents();
if (parents.hasNext()) {var folder = parents.next();}
else {folder = DriveApp.getRootFolder();}
var sheets = ss.getSheets();
for (var i=0; i<sheets.length; i++) {
var url_ext = 'export?exportFormat=pdf&format=pdf&gid=' + sheets[i].getSheetId()
+'&size=letter&portrait=true&fitw=true&sheetnames=false'
+'&printtitle=false&pagenumbers=false&gridlines=false&fzr=false';
var options = {headers:{'Authorization':'Bearer '+ScriptApp.getOAuthToken()}}
var response = UrlFetchApp.fetch(url + url_ext, options);
var blob = response.getBlob().setName(ss.getName()+' - '+sheets[i].getName()+'.pdf');
folder.createFile(blob);
}
};
该脚本有效-但仅适用于工作簿的前六页。将第六张工作表另存为PDF后,它返回以下错误:
<?xml version="1.0" encoding="UTF-8"?> <intervals personid=""
status="Unauthorized" code="401"><error><code>9</code><message>User
bad auth</message><verbose><item>You must include your API token when
making API requests.</item></verbose></error></intervals>
我很困惑为什么它可以完美地工作六张纸,然后停下来。
有想法吗?
解决:显然,这是@Will建议的“请求过多”问题。我在循环末尾添加了以下延迟:
Utilities.sleep(6000);
现在,脚本会将工作簿中的所有17张工作表另存为单独的PDF。我不知道在这段时间内有多少个请求“太多”,但是6秒的延迟解决了这个问题(3秒的延迟是不够的)。
谢谢大家的投入。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句