Google Sheets脚本需求:实现多区域分页导出PDF
解决方案:多区域导出并合并为单PDF
核心逻辑:逐个导出每个区域为独立PDF Blob,再合并这些Blob为单个多页PDF。
完整修改代码
function ExportMultipleRangesToPDF() { var spreadsheet = SpreadsheetApp.getActiveSpreadsheet(); var sheet = spreadsheet.getActiveSheet(); // 定义需要导出的多个区域,顺序对应PDF页码顺序 var targetRanges = [ sheet.getRange("A1:C14"), sheet.getRange("A16:C29"), sheet.getRange("A31:C44") // 可继续添加更多区域,格式为 sheet.getRange("起始单元格:结束单元格") ]; // 通用导出配置,可根据需求调整参数 var baseExportUrl = 'https://docs.google.com/spreadsheets/d/' + spreadsheet.getId() + '/export?exportFormat=pdf&format=pdf' + '&size=A4' + '&portrait=true' + '&fitw=true' + '&top_margin=1' + '&bottom_margin=1' + '&left_margin=1' + '&right_margin=1' + '&sheetnames=false' + '&printtitle=false' + '&pagenum=false' + '&gridlines=false' + '&fzr=FALSE' + '&gid=' + sheet.getSheetId(); var pdfBlobs = []; var authToken = ScriptApp.getOAuthToken(); // 逐个导出每个区域为PDF Blob targetRanges.forEach(function(range) { var rangeExportUrl = baseExportUrl + '&r1=' + (range.getRow() - 1) + '&r2=' + range.getLastRow() + '&c1=' + (range.getColumn() - 1) + '&c2=' + range.getLastColumn(); var response = UrlFetchApp.fetch(rangeExportUrl, { muteHttpExceptions: true, headers: { Authorization: 'Bearer ' + authToken } }); pdfBlobs.push(response.getBlob()); }); // 合并多个PDF Blob为单个多页PDF var mergedPdf = mergePdfBlobs(pdfBlobs); mergedPdf.setName(spreadsheet.getName() + "_多区域导出.pdf"); // 保存到Drive并弹出链接提示 var savedFile = DriveApp.createFile(mergedPdf); SpreadsheetApp.getUi().alert("导出完成,PDF链接:\n" + savedFile.getUrl()); } // 辅助函数:合并多个PDF Blob function mergePdfBlobs(pdfBlobs) { if (pdfBlobs.length === 0) return null; if (pdfBlobs.length === 1) return pdfBlobs[0]; var mergedBytes = []; var eofMarkerRegex = /%%EOF[\r\n]/g; pdfBlobs.forEach(function(blob, index) { var bytes = blob.getBytes(); var content = Utilities.newBlob(bytes).getDataAsString(); // 移除当前PDF的EOF标记(最后一个PDF保留) if (index !== pdfBlobs.length - 1) { content = content.replace(eofMarkerRegex, ""); bytes = Utilities.newBlob(content).getBytes(); } mergedBytes = mergedBytes.concat(Array.from(bytes)); }); return Utilities.newBlob(mergedBytes, "application/pdf"); }
关键说明
- 区域配置:在
targetRanges数组中添加或修改导出区域,数组顺序就是PDF的页码顺序 - 合并逻辑:通过移除每个PDF(除最后一个)的
%%EOF结束标记,将字节流拼接实现多页合并 - 配置复用:抽离基础导出参数到
baseExportUrl,减少重复代码,方便统一调整
使用步骤
- 打开Google Sheets对应的脚本编辑器
- 替换原代码为上述完整代码
- 修改
targetRanges中的区域为你需要的范围 - 运行
ExportMultipleRangesToPDF函数,授权后即可完成导出
内容的提问来源于stack exchange,提问作者user2144831
相关产品推荐
相关产品推荐

