如何用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
相关产品推荐
相关产品推荐

