You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

通过Google Apps Script检查表内容并按需导出PDF至邮件压缩包

发送含指定工作表PDF压缩包的Google Apps Script解决方案

刚好我之前做过类似的需求,给你整理了一个现成的Google Apps Script脚本,能完美实现你要的功能——只把Google Sheets里有实际内容的工作表转成PDF,打包成压缩包后发送到指定邮箱。脚本会通过检测特定单元格(示例用的A11)的内容判断工作表是否有效,避免把空表也打包进去,具体如下:

完整脚本代码

function sendPDFZipViaEmail() {
  // 这里是可以自定义的配置项
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const targetEmail = "recipient@example.com"; // 替换成你要发送的邮箱
  const checkCell = "A11"; // 用来判断工作表是否有效的单元格位置
  const emailSubject = "有效工作表PDF压缩包";
  const emailBody = "您好,附件是整理好的有效工作表PDF压缩包,请查收。";
  
  // 创建临时文件夹存生成的PDF,避免乱占Drive空间
  const tempFolder = DriveApp.createFolder("临时PDF存储");
  let validPdfFiles = [];
  
  // 遍历所有工作表
  const allSheets = ss.getSheets();
  for (let sheet of allSheets) {
    const sheetName = sheet.getName();
    const cellContent = sheet.getRange(checkCell).getValue();
    
    // 判断工作表是否有效:这里默认非空即为有效,你可以改成自己的判断逻辑
    if (cellContent !== "" && cellContent !== null) {
      // 配置PDF导出的参数,比如尺寸、是否显示网格线这些
      const exportUrl = `https://docs.google.com/spreadsheets/d/${ss.getId()}/export?` +
        `format=pdf` +
        `&gid=${sheet.getSheetId()}` +
        `&size=A4` +
        `&portrait=true` +
        `&fitw=true` +
        `&sheetnames=false` +
        `&printtitle=false` +
        `&pagenumbers=false` +
        `&gridlines=false` +
        `&fzr=false`;
      
      // 调用API获取PDF内容
      const authToken = ScriptApp.getOAuthToken();
      const response = UrlFetchApp.fetch(exportUrl, {
        headers: {
          'Authorization': 'Bearer ' + authToken
        }
      });
      
      // 把PDF存到临时文件夹
      const pdfBlob = response.getBlob().setName(`${sheetName}.pdf`);
      const savedPdf = tempFolder.createFile(pdfBlob);
      validPdfFiles.push(savedPdf);
    }
  }
  
  // 如果有有效PDF,就打包发邮件
  if (validPdfFiles.length > 0) {
    // 把所有PDF打包成ZIP
    const zipPackage = Utilities.zip(validPdfFiles.map(file => file.getBlob()), "有效工作表PDF.zip");
    
    // 发送邮件
    MailApp.sendEmail({
      to: targetEmail,
      subject: emailSubject,
      body: emailBody,
      attachments: [zipPackage]
    });
    
    // 清理临时文件夹
    tempFolder.setTrashed(true);
    SpreadsheetApp.getUi().alert(`邮件发送成功!一共包含${validPdfFiles.length}个PDF文件。`);
  } else {
    SpreadsheetApp.getUi().alert("没检测到有效工作表,不用发邮件啦~");
  }
}

关键功能拆解

  • 有效工作表筛选:脚本会挨个检查每个工作表的指定单元格(比如A11),只有当这个单元格有内容时,才会把该工作表转成PDF。你可以根据自己的需求修改判断逻辑,比如改成“单元格内容包含‘完成’关键词”之类的。
  • 自定义PDF样式:通过构造导出URL,我已经帮你配置好了常用的PDF参数——A4竖版、适配页面宽度、隐藏工作表名/页码/网格线,你要是需要调整(比如改成横版、显示页码),直接修改URL里的参数就行。
  • 自动清理临时文件:生成的PDF会先存在临时文件夹里,邮件发完就自动删掉,不会在你的Drive里留下垃圾文件。
  • 压缩包发送:把所有有效PDF打包成一个ZIP,避免邮件附件太多显得杂乱,收件人下载也更方便。

使用小贴士

  1. 第一次运行脚本时,会弹出授权请求,按照提示给脚本授权访问Drive和邮件服务就行。
  2. 记得把脚本里的targetEmail换成实际要接收邮件的邮箱地址。
  3. 如果要换检测的单元格,直接修改checkCell的值(比如改成B5)。
  4. PDF导出参数可以根据需求调整,比如把size=A4改成size=Letterportrait=true改成portrait=false就能导出横版PDF。

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

火山引擎 最新活动