Google Script:从同一Google Sheet导出多页PDF的实现方法
Google Script实现Google Sheet多区域分页面导出PDF
要实现将不同单元格区域作为单独页面导出到同一PDF,你需要先分别导出每个区域的PDF Blob,再将它们合并成一个多页文件。以下是修改后的完整代码:
function savePdfRechnung() { var ss = SpreadsheetApp.getActiveSpreadsheet(); var sheet = ss.getSheetByName('HN_Vorlage'); // 定义需要导出的两个单元格区域 var rngStr1 = 'A1:I44'; var rngStr2 = 'A51:I94'; var inputs = sheet.getRange('O5:O23').getValues(); var sheetId = sheet.getSheetId(); // 动态获取工作表ID,替代硬编码的gid // 构建导出URL的公共参数部分 var baseUrl = 'https://docs.google.com/spreadsheets/d/' + ss.getId() + '/export?format=pdf&exportFormat=pdf&size=A4&portrait=true&scale=4' + '&top_margin=0&left_margin=0&right_margin=0&bottom_margin=0' + '&gid=' + sheetId; // 获取第一个区域的PDF Blob var blob1 = UrlFetchApp.fetch(baseUrl + '&range=' + rngStr1, { headers: {Authorization: "Bearer " + ScriptApp.getOAuthToken()} }).getBlob().setContentType('application/pdf'); // 获取第二个区域的PDF Blob var blob2 = UrlFetchApp.fetch(baseUrl + '&range=' + rngStr2, { headers: {Authorization: "Bearer " + ScriptApp.getOAuthToken()} }).getBlob().setContentType('application/pdf'); // 合并两个PDF Blob为一个多页PDF,直接传入Blob数组即可自动合并 var combinedPdf = DriveApp.createFile([blob1, blob2]).setName(inputs[0][0] + ".pdf"); // 移动到目标文件夹 combinedPdf.moveTo(DriveApp.getFolderById(inputs[1][0])); }
关键优化点:
- 动态获取工作表ID:用
sheet.getSheetId()替代原代码中硬编码的1929278749,避免工作表ID变更后代码失效 - 提取公共URL参数:把重复的导出参数抽成
baseUrl,减少代码冗余 - 简化合并逻辑:直接将两个PDF Blob放入数组传入
DriveApp.createFile,Google会自动合并成多页PDF - 删除原代码中未使用的
fetch函数,简化代码结构
内容的提问来源于stack exchange,提问作者godspeed
相关产品推荐
相关产品推荐

