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

