You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在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,确保只导出目标工作表

脚本优化点

  1. 避免重复调用SpreadsheetApp.openById(),直接从已打开的ss对象读取数据,提升运行效率
  2. 使用URL参数精确控制导出格式,替代原有的无格式getBlob()方法
  3. 完整保留原脚本的所有业务逻辑(隐藏/显示表、文件命名、移动文件夹、发送邮件、更新编号)

内容的提问来源于stack exchange,提问作者Daryn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 14:40:47