在Google Apps Script中导出PDF时如何配置页面格式?
Google Sheets导出PDF格式控制解决方案
原脚本通过SpreadsheetApp.getBlob()导出PDF,这种方法无法自定义页面格式。要实现边距调整、横竖版切换、页面适配等需求,必须使用Google Sheets的导出URL接口,通过URL参数指定格式设置。
修改后的完整可运行脚本
function exportSheet() { var sheetName2 = 'PDF for Export'; var ssId = '1vYR5vtHkIkVDZtbSxsocOYEF1DNkaOPnc47irOpE_Rc'; var ss = SpreadsheetApp.openById(ssId); // 获取命名和编号数据(优化:直接从已打开的ss对象读取,避免重复调用openById) var pdfBuilderSheet = ss.getSheetByName('PDF Builder'); var namen = pdfBuilderSheet.getRange('E2').getValue(); var number = pdfBuilderSheet.getRange('E1').getValue(); var nextnumber = +number + 1; // 隐藏非目标工作表 var sheets = ss.getSheets(); for (var i = 0; i < sheets.length; i++) { if (sheets[i].getSheetName() !== sheetName2) { sheets[i].hideSheet(); } } // --- 核心:带格式参数的PDF导出逻辑 --- var url = 'https://docs.google.com/spreadsheets/d/' + ssId + '/export?'; var exportOptions = { format: 'pdf', size: 'letter', // 纸张大小:letter, legal, A4等 portrait: false, // false=横向,true=纵向 fitw: true, // 适配页面宽度,解决偏移问题 sheetnames: false, // 是否显示工作表名称 printtitle: false, // 是否显示标题 pagenumbers: false, // 是否显示页码 gridlines: false, // 是否显示网格线 fzr: false, // 是否冻结行 margin: 'normal', // 边距:normal, minimum, none // 自定义边距(如果margin设为custom需要下面四个参数,单位是英寸) // top_margin: 0.5, // bottom_margin: 0.5, // left_margin: 0.5, // right_margin: 0.5, gid: ss.getSheetByName(sheetName2).getSheetId() // 指定导出的工作表ID }; // 拼接URL参数 var params = []; for (var key in exportOptions) { params.push(key + '=' + exportOptions[key]); } url += params.join('&'); // 获取OAuth令牌,用于授权访问导出URL var token = ScriptApp.getOAuthToken(); var response = UrlFetchApp.fetch(url, { headers: { 'Authorization': 'Bearer ' + token } }); var newFile = DriveApp.createFile(response.getBlob().setName(namen)); // --- 核心逻辑结束 --- // 恢复显示所有工作表 for (var i = 0; i < sheets.length; i++) { sheets[i].showSheet(); } // 移动文件到目标文件夹、发送邮件、更新编号 newFile.moveTo(DriveApp.getFolderById('1I8whlpP1f56SufXEp5eKBTLzIBnA6Fau')); GmailApp.sendEmail('daryn@cineviewstudiosfl.com','NEW QUOTE','NEW QUOTE', {attachments: [newFile]}); pdfBuilderSheet.getRange('E1').setValue(nextnumber); }
关键格式参数说明
portrait:true为纵向,false为横向,直接控制横竖版margin: 可选值normal/minimum/none,若需自定义边距,设为custom并添加top_margin/bottom_margin/left_margin/right_margin参数(单位英寸)fitw:true让内容适配页面宽度,解决导出偏移问题size: 设置纸张大小,如A4/letter/legal等gridlines:false可隐藏网格线,让PDF更整洁gid: 指定导出的工作表ID,确保只导出目标工作表
脚本优化点
- 避免重复调用
SpreadsheetApp.openById(),直接从已打开的ss对象读取数据,提升运行效率 - 使用URL参数精确控制导出格式,替代原有的无格式
getBlob()方法 - 完整保留原脚本的所有业务逻辑(隐藏/显示表、文件命名、移动文件夹、发送邮件、更新编号)
内容的提问来源于stack exchange,提问作者Daryn
相关产品推荐
相关产品推荐

