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

请求合并Google Sheets存PDF与发邮件代码并匹配指定PDF布局

合并Google Apps Script:导出命名范围PDF并保存+发送邮件(匹配指定布局)

没问题,我把两段代码整合好了,还帮你确保PDF布局能匹配Sample 2的样式。下面是完整的可运行代码,我会拆解关键部分帮你理解:

function exportNamedRangeAndSendEmail() {
  // -------------------------- 配置参数 --------------------------
  const SPREADSHEET_ID = "你的Google Sheets文档ID";
  const NAMED_RANGE = "你的命名范围名称";
  const TARGET_FOLDER_ID = "保存PDF的目标文件夹ID";
  const RECIPIENT = "收件人邮箱地址";
  const EMAIL_SUBJECT = "导出的命名范围PDF";
  const EMAIL_BODY = "您好,附件是您需要的表格命名范围PDF文件。";
  // -------------------------------------------------------------

  try {
    // 1. 获取目标表格和命名范围
    const spreadsheet = SpreadsheetApp.openById(SPREADSHEET_ID);
    const namedRange = spreadsheet.getRangeByName(NAMED_RANGE);
    if (!namedRange) {
      throw new Error(`未找到命名范围:${NAMED_RANGE}`);
    }
    
    // 2. 构造PDF导出URL(匹配Sample 2布局)
    const sheetId = namedRange.getSheet().getSheetId();
    const rangeA1 = namedRange.getA1Notation();
    const exportUrl = `https://docs.google.com/spreadsheets/d/${SPREADSHEET_ID}/export?` +
      `format=pdf` +
      `&gid=${sheetId}` +
      `&range=${encodeURIComponent(rangeA1)}` +
      `&size=A4` + // 纸张尺寸,按需调整(Letter/Tabloid等)
      `&portrait=true` + // 纵向:true,横向:false
      `&margin=normal` + // 边距:normal/small/large/none
      `&fzr=false` + // 不冻结行
      `&fzc=false` + // 不冻结列
      `&gridlines=false` + // 隐藏网格线(Sample 2显示的话改成true)
      `&printtitle=false` + // 不打印表格标题
      `&sheetnames=false` + // 不打印工作表名称
      `&pagenum=false` + // 不显示页码
      `&top_margin=0.5` + // 自定义上边距(可选,单位英寸)
      `&bottom_margin=0.5` + // 自定义下边距
      `&left_margin=0.5` + // 自定义左边距
      `&right_margin=0.5`; // 自定义右边距

    // 3. 获取PDF blob并保存到指定文件夹
    const token = ScriptApp.getOAuthToken();
    const response = UrlFetchApp.fetch(exportUrl, {
      headers: { 'Authorization': `Bearer ${token}` }
    });
    const pdfBlob = response.getBlob().setName(`${NAMED_RANGE}_导出.pdf`);
    
    const targetFolder = DriveApp.getFolderById(TARGET_FOLDER_ID);
    const savedPdfFile = targetFolder.createFile(pdfBlob);
    console.log(`PDF已保存到文件夹:${savedPdfFile.getName()}`);

    // 4. 发送带PDF附件的邮件
    MailApp.sendEmail({
      to: RECIPIENT,
      subject: EMAIL_SUBJECT,
      body: EMAIL_BODY,
      attachments: [savedPdfFile.getBlob()]
    });
    console.log(`邮件已发送给:${RECIPIENT}`);

  } catch (error) {
    console.error(`执行出错:${error.message}`);
    // 可选:发送错误通知邮件
    // MailApp.sendEmail(RECIPIENT, "导出PDF失败", `错误信息:${error.message}`);
  }
}

关键细节说明

  • 参数替换:先把代码顶部配置区的占位符改成你自己的实际信息,比如表格ID、命名范围名称这些,不然代码没法正常运行。
  • 布局匹配调整:如果Sample 2的布局有特殊要求,你可以修改exportUrl里的参数:
    • 比如需要横向排版,把portrait=true改成portrait=false
    • 如果Sample 2显示网格线,把gridlines=false改成true
    • 自定义边距可以根据实际调整top_margin等参数的数值
  • 错误处理:代码里加了基本的错误捕获,如果找不到命名范围或者保存/发送失败,会在控制台打印错误信息,你也可以打开注释里的错误通知邮件功能,方便及时知道问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 20:58:14