Google Sheets单元格选区导出PDF显示为HTML问题求助
问题分析与修复方案
你遇到的PDF实际是HTML的问题,核心是代码里的URL构造错误、请求头写法错误,以及缺少必要的导出参数,导致返回了网页而非PDF文件。以下是具体问题和修复后的代码:
关键错误点
- URL路径错误:用了带
/edit的编辑页面URL,应该用Google Sheets的导出专用路径/export - 无效的replace操作:原URL里没有
SS_ID字符串,replace("SS_ID", sheet2.getName())完全没起作用,应直接用表格ID构造导出URL - 请求头语法错误:
headers未放在UrlFetchApp.fetch的第二个参数对象里,且Authorisation拼写错误(正确是Authorization) - 缺少选区导出参数:要导出指定单元格范围,必须添加
&range=A1:N50参数;工作表ID需用&gid=工作表ID的形式拼接 - 未定义sheet1/sheet2:代码里未看到工作表对象的定义,需先通过
getSheetByName获取对应工作表
修复后的完整代码
function exportRangeToPDF() { // 获取当前表格 var ss = SpreadsheetApp.getActiveSpreadsheet(); // 替换成你实际的工作表名称 var sheet1 = ss.getSheetByName("Sheet1"); var sheet2 = ss.getSheetByName("Sheet2"); var token = ScriptApp.getOAuthToken(); // 导出目标文件夹ID var reqFolder = '1sIxddxsPHKLKjuiArZdtrckCMxAePHR6'; var folder = DriveApp.getFolderById(reqFolder); // 生成PDF文件名 var paymentreq = sheet1.getRange("B7").getValue(); var creditor = sheet2.getRange("D9").getValue(); var pdfName = 'Req ' + paymentreq + " " + creditor + " " + Utilities.formatDate(new Date(),"GMT+1","dd.MM.yyyy"); // 构造导出URL:使用表格ID拼接导出路径 var spreadsheetId = "1roKWtpNPsfaQDxW82WZCfQzek77HEV4ihuC52radoXU"; var url = "https://docs.google.com/spreadsheets/d/" + spreadsheetId + "/export"; // 导出参数集合:指定格式、尺寸、导出范围等 var urlParams = [ 'exportFormat=pdf', 'format=pdf', 'size=A4', 'portrait=false', // 横向排版 'fitw=true', 'range=A1:N50', // 要导出的单元格选区 'gid=' + sheet2.getSheetId() // 指定导出的工作表 ].join('&'); // 发起请求:正确传递授权头 var response = UrlFetchApp.fetch(url + "?" + urlParams, { headers: { 'Authorization': 'Bearer ' + token } }); // 在指定文件夹创建PDF文件 var blob = response.getBlob().setName(pdfName + '.pdf'); folder.createFile(blob); }
额外说明
- 务必替换代码里的
Sheet1和Sheet2为你实际的工作表名称 - 表格ID已使用你提供的字符串,确认和你的表格URL一致即可
- 移除了无用的
activate()方法,导出PDF不需要激活选区,直接通过range参数指定即可
内容的提问来源于stack exchange,提问作者Toni Marais
相关产品推荐
相关产品推荐

