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

请求修复从Gmail附件导入CSV至Google Sheets的Apps Script

修复后的脚本及问题说明

错误原因

TypeError: message.getAttachmentsByType is not a function 是因为GmailApp的Message类根本没有getAttachmentsByType这个方法,得手动遍历所有附件筛选CSV文件。

修复后的完整脚本

function ExtractCSVFromGmailAndImport() {
  const label = "Report Data"; // 替换成你的Gmail标签
  const subjects = ["Data 1", "Data 2", "Data 3"]; // 替换成需要匹配的邮件主题
  const spreadsheetId = "12345678900987654311"; // 替换成你的Google Sheets ID

  // 提前打开表格,避免循环里重复调用拖慢速度
  const spreadsheet = SpreadsheetApp.openById(spreadsheetId);

  subjects.forEach(subject => {
    const sheet = spreadsheet.getSheetByName(subject);
    if (!sheet) {
      console.log(`找不到名为${subject}的工作表,跳过`);
      return;
    }

    // 清空工作表内容(要连格式一起清就改成sheet.clear())
    sheet.clearContents();

    // 只搜对应标签+主题的最新1条邮件线程
    const threads = GmailApp.search(`label:${label} subject:${subject}`, 0, 1);
    if (threads.length === 0) {
      console.log(`没找到主题为${subject}的邮件,跳过`);
      return;
    }

    const thread = threads[0];
    // 拿线程里最新的那封邮件
    const messages = thread.getMessages();
    const latestMessage = messages[messages.length - 1];

    // 遍历附件找CSV文件
    const attachments = latestMessage.getAttachments();
    const csvAttachment = attachments.find(att => {
      // 兼容两种判断方式:MIME类型或文件名后缀
      return att.getContentType() === 'text/csv' || att.getName().toLowerCase().endsWith('.csv');
    });

    if (csvAttachment) {
      // 解析CSV并写入表格(从A1开始覆盖)
      const csvData = csvAttachment.getDataAsString();
      const csv = Utilities.parseCsv(csvData);
      sheet.getRange(1, 1, csv.length, csv[0].length).setValues(csv);
      console.log(`主题${subject}的CSV数据导入成功`);
    } else {
      console.log(`主题${subject}的邮件里没找到CSV附件`);
    }
  });
}

关键修改点

  • 替换无效方法:删掉getAttachmentsByType,改用getAttachments()获取所有附件,再筛选出CSV类型的文件。
  • 优化性能:提前打开Spreadsheet,避免循环中重复调用openById浪费资源。
  • 匹配最新数据:搜索时只取最新1条邮件线程,拿线程里的最新邮件,避免导入历史重复数据,符合每日替换报表的需求。
  • 补全错误提示:添加工作表不存在、无匹配邮件、无CSV附件的日志,方便排查问题。
  • 符合替换需求:从A1单元格开始写入数据,直接覆盖清空后的工作表(原脚本是追加,不符合你的替换要求)。

使用提示

  1. 把脚本里的label、subjects、spreadsheetId换成你自己的信息。
  2. 要加发件人筛选的话,把搜索语句改成:label:${label} subject:${subject} from:xxx@example.com。
  3. 首次运行要授权脚本访问Gmail和Google Sheets的权限。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 15:27:25