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

Google Apps Script的unzipGmail1如何从Gmail压缩附件中按名称选CSV文件

代码修改方案

Utilities.unzip()返回的是Blob数组,不支持直接用文件名作为键索引文件,你需要遍历解压后的文件列表匹配目标文件名即可,同时修复了原代码中parseCsv未传参数的错误,修改后的完整代码如下:

核心修改点

  • 遍历解压后的所有文件,通过文件名匹配目标CSV,支持兼容带.csv后缀和不带后缀的情况
  • 增加空值判断,避免未找到邮件、附件、目标文件时的运行报错
  • 修正CSV解析的参数缺失问题
function unzipGmail1(){
    // 搜索指定主题的邮件线程
    var threads = GmailApp.search('subject:"XXXXX"');
    if(threads.length === 0) throw new Error("未找到对应主题的邮件");
    
    // 取最新一条消息
    var messages = threads[0].getMessages();
    var latestMsg = messages[messages.length - 1];
    
    // 提取第一个压缩附件
    var attachments = latestMsg.getAttachments();
    if(attachments.length === 0) throw new Error("邮件无附件");
    var zipBlob = attachments[0].copyBlob();
    zipBlob.setContentTypeFromExtension();
    
    // 解压压缩包
    var unzippedFiles = Utilities.unzip(zipBlob);
    var targetBlob = null;
    var targetName = "decay vehicle list";
    
    // 遍历匹配目标CSV文件
    for(var i = 0; i < unzippedFiles.length; i++){
        var fileName = unzippedFiles[i].getName();
        // 可根据实际需要调整匹配规则,模糊匹配可换成 fileName.includes(targetName)
        if(fileName === targetName || fileName === targetName + ".csv"){
            targetBlob = unzippedFiles[i];
            break;
        }
    }
    if(!targetBlob) throw new Error("压缩包中未找到目标CSV文件");
    
    // 解析CSV并写入表格
    var csvData = Utilities.parseCsv(targetBlob.getDataAsString());
    var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("XXXX");
    sheet.getRange("A1:AO").clear();
    sheet.getRange(1, 1, csvData.length, csvData[0].length).setValues(csvData);
}

如果你不确定压缩包内文件的完整名称,可以在遍历代码中插入console.log(fileName),运行后在Apps Script的执行日志中查看所有解压后的文件名,调整匹配规则即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 20:57:03