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

Google Sheets Apps Script问题:指定列PDF邮件及工作表显示异常

解决方案

以下是修复后的完整代码,同时解决了PDF导出指定范围和工作表恢复显示的问题:

function sendReport() {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const invoiceSheet = ss.getSheetByName("Email Invoice");
  // 要隐藏的工作表名称列表
  const sheetsToHide = [
    "Fuel Usage", "Gross Metrics", "Historical Tracking Metrics",
    "Scale Ticket Form", "Pay Stub", "Lookups", "Trucking Data", "Indexes"
  ];

  try {
    // 隐藏指定工作表
    sheetsToHide.forEach(sheetName => {
      ss.getSheetByName(sheetName).hideSheet();
    });

    // 获取驱动信息
    const emailDriverName = invoiceSheet.getRange("J7").getValue();
    const driveremailaddr = invoiceSheet.getRange("J14").getValue();
    const exportRange = "A1:F105";

    // 构建PDF导出URL,指定工作表和范围
    const sheetId = invoiceSheet.getSheetId();
    const exportUrl = `${ss.getUrl().replace(/edit$/, '')}export?exportFormat=pdf&format=pdf` +
      `&gid=${sheetId}` +
      `&range=${encodeURIComponent(exportRange)}` +
      `&size=letter` +
      `&portrait=true` +
      `&fitw=true` +
      `&sheetnames=false&printtitle=false` +
      `&pagenumbers=false&gridlines=false` +
      `&fzr=false`;

    // 获取PDF Blob
    const pdfBlob = UrlFetchApp.fetch(exportUrl, {
      headers: { 'Authorization': `Bearer ${ScriptApp.getOAuthToken()}` }
    }).getBlob().setName("Load Invoice.pdf");

    // 发送邮件
    const message = {
      to: driveremailaddr,
      subject: `Loads by ${emailDriverName}`,
      body: `Please do not respond to this email as it is an unmonitored address.

If you have any questions please call User or email example-email2.com

See Attachment`,
      cc: 'example-email@gmail.com',
      attachments: [pdfBlob]
    };
    MailApp.sendEmail(message);

  } finally {
    // 恢复显示所有隐藏的工作表
    sheetsToHide.forEach(sheetName => {
      ss.getSheetByName(sheetName).showSheet();
    });
  }
}

关键修改说明

1. 修复工作表恢复显示问题

  • 原代码用activate()仅能激活工作表,无法恢复显示隐藏的表,替换为showSheet()才是正确的显示隐藏工作表的方法。
  • 用try...finally块包裹逻辑,确保无论邮件发送是否出错,隐藏的工作表都会被恢复,避免出现表永久隐藏的情况。
  • 将需隐藏的工作表整理为数组,通过循环批量处理,减少冗余代码。

2. 实现指定范围导出PDF

  • 原代码getAs(MimeType.PDF)会导出整个电子表格,改为构建Google Sheets导出URL,指定目标工作表ID和A1:F105范围。
  • 用UrlFetchApp携带OAuth令牌请求导出链接,获取仅包含指定范围的PDF Blob。
  • URL参数可按需调整PDF格式,示例中设置了常用的无网格线、无标题的打印参数。

3. 代码优化

  • 提取电子表格和目标工作表为变量,避免重复调用获取方法,提升代码可读性和执行效率。
  • 移除原代码中多余的大括号,修复代码结构问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 15:43:27