如何修改Google Apps Script将多工作表导出为单个PDF文件
修改脚本实现导出所有工作表为单个PDF
原脚本的问题在于循环遍历每个工作表单独导出,要改成导出整个表格为单PDF,只需做以下关键调整:
核心修改点
- 移除遍历单个工作表的循环逻辑,直接导出整个电子表格
- 删除URL参数中的
&gid=项,这样Google Sheets会默认导出所有可见工作表为一个连续的PDF - 统一文件名的取值(原脚本每个sheet取自己的D5,现在需要固定取某一个单元格的值,比如第一个工作表的D5,你可以根据需求修改)
修改后的完整代码
function savePDFs(optSSId, optSheetId) { var ss = optSSId ? SpreadsheetApp.openById(optSSId) : SpreadsheetApp.getActiveSpreadsheet(); var url = ss.getUrl().replace(/edit$/, ''); var parents = DriveApp.getFileById(ss.getId()).getParents(); var folders = DriveApp.getFoldersByName('Invoices'); var folder = folders.hasNext() ? folders.next() : parents.next(); // 导出整个表格的PDF参数,去掉gid参数即可导出所有可见工作表 var url_ext = 'export?exportFormat=pdf&format=pdf' + '&size=letter' // 纸张尺寸 + '&portrait=true' // 纵向排版,false为横向 + '&fitw=true' // 适配宽度,false为实际尺寸 + '&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); // 取第一个工作表的D5值作为文件名,可根据需求修改为特定工作表 var valor = ss.getSheets()[0].getRange('D5').getValue(); var blob = response.getBlob().setName(valor + '.pdf'); folder.createFile(blob); }
额外说明
- 如果只想导出特定几个工作表而不是全部,可以在URL参数里添加
&include_grids=sheetId1,sheetId2,sheetId3,把对应的工作表ID用逗号分隔替换进去 - 文件名的单元格取值可以自行修改,比如改成
ss.getSheetByName("Sheet1").getRange('D5').getValue()来指定某个工作表
内容的提问来源于stack exchange,提问作者Mee
相关产品推荐
相关产品推荐

