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

如何用App Script从Gmail CSV附件提取指定列到Google表格

修改后的脚本(仅导入指定列)

以下是修改后的完整脚本,支持按列名或列索引筛选需要导入的列:

function getattach(){
    var threads = GmailApp.search('Daily Hunting file has:attachment newer_than:1d');
    if (threads.length === 0) return []; // 没有找到对应邮件时返回空数组

    var messages = threads[0].getMessages();
    var attach = messages[0].getAttachments();
    var csvData = [];
    
    // -------------------------- 配置需要保留的列 --------------------------
    // 方式1:按列名筛选(比如要保留"姓名","邮箱","金额"这三列)
    var targetColumnNames = ["姓名", "邮箱", "金额"]; 
    // 方式2:按列索引筛选(从0开始计数,比如保留第1、3、5列)
    // var targetColumnIndexes = [0, 2, 4]; 
    // ---------------------------------------------------------------------

    for (var i = 0; i < attach.length; ++i) {
      var data = attach[i].copyBlob();
      var name = data.getName();
      
      if (name.indexOf('report.csv') > -1) {
          csvData = Utilities.parseCsv(data.getDataAsString());
          if (csvData.length === 0) break;

          // 根据配置筛选列
          if (typeof targetColumnNames !== 'undefined') {
              // 按列名筛选:先找到目标列的索引
              var headerRow = csvData[0];
              var targetIndexes = targetColumnNames.map(name => headerRow.indexOf(name)).filter(index => index !== -1);
              // 提取表头和数据行的目标列
              csvData = csvData.map(row => targetIndexes.map(index => row[index]));
          } else if (typeof targetColumnIndexes !== 'undefined') {
              // 按列索引筛选:直接提取对应列
              csvData = csvData.map(row => targetColumnIndexes.map(index => row[index]));
          }
          break; // 找到目标CSV后停止遍历附件
      }
    }
       
    return csvData;
}

function updateSheet(){
    var ss = SpreadsheetApp.getActive();
    var ImportSheet = ss.getSheetByName('Import');
    if (!ImportSheet) return; // 找不到指定工作表时停止执行
    
    var ImportData = getattach();
    if (ImportData.length === 0) return; // 没有数据时停止执行

    // 清空原有数据并写入新数据
    var lastRow = ImportSheet.getLastRow();
    if (lastRow > 0) {
        ImportSheet.getRange(1, 1, lastRow, ImportSheet.getLastColumn()).clearContent();
    }
    ImportSheet.getRange(1, 1, ImportData.length, ImportData[0].length).setValues(ImportData);
}

关键修改说明

  • 可配置的列筛选:在getattach函数开头的配置区,你可以选择按列名或列索引指定需要保留的列,注释里有两种方式的示例,按需切换即可。
  • 错误处理增强:增加了邮件、工作表、数据为空时的判断,避免脚本因异常情况报错。
  • 修复写入逻辑错误:原脚本中ImportData[10].length的写法会因数据行数不足导致报错,改为ImportData[0].length确保取到正确的列数。
  • 优化附件遍历:找到目标CSV后立即停止遍历,提升执行效率。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 15:16:02