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

Google Apps Script实现动态范围导出PDF并邮件发送需求

Google Apps Script 适配活动表格/工作表的PDF导出方案(含选中区域逻辑)

核心实现逻辑

  1. 绑定当前活动表格与工作表,摆脱固定ID的局限性
  2. 自动识别用户选中区域,仅保留A-G列内容,与前3行表头合并导出
  3. 无选中区域时,自动导出A-G列整表数据

完整代码

function exportAndSendPDF() {
  // 获取当前活动表格和工作表
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const sheet = ss.getActiveSheet();
  const ssId = ss.getId();
  const sheetId = sheet.getSheetId();
  
  // 定义基础表头范围:前3行A-G列
  const headerRange = `'${sheet.getName()}'!A1:G3`;
  let exportRange = headerRange;
  
  // 获取用户选中的活动区域
  const activeRange = sheet.getActiveRange();
  const hasSelectedRange = activeRange.getNumRows() > 0 && activeRange.getNumColumns() > 0;
  
  if (hasSelectedRange) {
    // 提取选中区域的A-G列部分(限定列1-7)
    const startRow = activeRange.getRow();
    const endRow = activeRange.getLastRow();
    // 避免与表头重复,从第4行开始合并
    const targetStartRow = Math.max(startRow, 4);
    if (targetStartRow <= endRow) {
      const selectedAGRange = `'${sheet.getName()}'!A${targetStartRow}:G${endRow}`;
      exportRange = `${headerRange},${selectedAGRange}`;
    }
  } else {
    // 无选中区域时,导出A-G列整表(表头+所有数据行)
    const lastRow = sheet.getLastRow();
    if (lastRow > 3) {
      const fullDataRange = `'${sheet.getName()}'!A4:G${lastRow}`;
      exportRange = `${headerRange},${fullDataRange}`;
    }
  }
  
  // 构建PDF导出URL参数
  const url = `https://docs.google.com/spreadsheets/d/${ssId}/export?` +
    `format=pdf` +
    `&size=A4` +
    `&portrait=true` +
    `&sheetnames=false` +
    `&printtitle=false` +
    `&pagenumbers=false` +
    `&gridlines=false` +
    `&fzr=false` +
    `&gid=${sheetId}` +
    `&range=${encodeURIComponent(exportRange)}`;
  
  // 获取PDF文件内容
  const token = ScriptApp.getOAuthToken();
  const response = UrlFetchApp.fetch(url, {
    headers: { 'Authorization': `Bearer ${token}` }
  });
  const pdfBlob = response.getBlob().setName(`${sheet.getName()}_导出文件.pdf`);
  
  // 发送邮件(自行修改收件人、主题、正文)
  MailApp.sendEmail({
    to: 'your-recipient@example.com',
    subject: `【${sheet.getName()}】导出PDF文件`,
    body: '附件为请求导出的PDF文件,请查收。',
    attachments: [pdfBlob]
  });
  
  SpreadsheetApp.getUi().alert('PDF导出并发送成功!');
}

关键代码说明

  • 活动对象获取:getActiveSpreadsheet()和getActiveSheet()必须在绑定到表格的脚本中使用(通过表格「扩展→Apps脚本」创建的脚本),独立脚本会触发报错,这大概率是你之前遇到问题的原因。
  • 选中区域处理:通过getActiveRange()获取用户选中区域,强制限定A-G列(1-7列),同时避免与前3行表头重复,从第4行开始合并选中区域。
  • PDF范围拼接:用逗号分隔多个区域,确保导出内容包含表头和选中数据;无选中时自动拼接表头到最后一行的A-G列。
  • OAuth权限:通过ScriptApp.getOAuthToken()获取权限,避免导出时出现权限不足的问题。

常见问题排查

  • 若调用getActiveSheet()报错:检查脚本是否为绑定到当前表格的脚本,而非独立的Google Apps Script项目。
  • 导出范围不符合预期:确认选中区域是否在A-G列内,代码已自动过滤超出列的部分;若整表导出异常,检查表格是否有隐藏行/列,getLastRow()会忽略完全空白的行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 04:40:26