如何用Google Apps Script导出Sheets指定工作表为原样式PDF
指定Google Sheets工作表导出为原生显示效果PDF
问题背景
- 需要导出Google Sheets内的单个固定格式工作表为PDF,要求导出内容、排版、样式和工作表实际显示效果完全一致
- 网上多数方案是通过
getRange提取单元格数据后重新构建结构导出,没法做到和原表样式100%匹配 - 初始测试代码只能导出整个表格文件的所有内容,没法指定单个工作表,代码如下:
function pdf(){ var ss = SpreadsheetApp.getActiveSpreadsheet(); var blob = ss.getBlob(); DriveApp.createFile(blob); }
实现方案
不用写复杂的结构重构逻辑,靠临时调整工作表可见性就能实现和网页端手动导出单个工作表完全一致的效果,代码复制后改下配置就能直接运行:
function exportTargetSheetToPDF() { // 按需修改以下两个配置项 const TARGET_SHEET_NAME = "替换成你要导出的工作表名称"; const PDF_NAME = "替换成你想要的导出PDF文件名.pdf"; const spreadSheet = SpreadsheetApp.getActiveSpreadsheet(); const targetSheet = spreadSheet.getSheetByName(TARGET_SHEET_NAME); if (!targetSheet) throw new Error("找不到对应名称的工作表,请检查配置"); const allSheets = spreadSheet.getSheets(); // 临时隐藏所有非目标工作表 allSheets.forEach(sheet => { if (sheet.getSheetId() !== targetSheet.getSheetId()) sheet.hideSheet(); }); // 生成PDF blob并存到云盘 const pdfBlob = spreadSheet.getBlob().setName(PDF_NAME); DriveApp.createFile(pdfBlob); // 恢复所有工作表的显示状态,不影响原表格使用 allSheets.forEach(sheet => { if (sheet.getSheetId() !== targetSheet.getSheetId()) sheet.showSheet(); }); }
使用说明
- 运行前只需要改代码开头两个配置:填对要导出的工作表名、导出的PDF文件名就行
- 导出逻辑和手动在网页端打开对应工作表、点「导出为PDF」的逻辑完全一致,所有合并单元格、单元格样式、条件格式、打印设置都会完整保留,不会出现排版错位
- 临时隐藏工作表的操作对其他协作者无感知,导出完成后会自动恢复所有工作表的显示状态,不会改动原表格的任何内容和配置
- 如果需要调整PDF的纸张方向、页边距、缩放比例,提前在对应工作表的打印设置里配置好即可,导出时会自动沿用这些设置。
内容的提问来源于stack exchange,提问作者Clown Aspirant
相关产品推荐
相关产品推荐

