google-apps-script - 从邮件附件中的压缩文件中获取电子表格
问题描述
我需要一个脚本来获取并打开一个压缩附件,这样我就可以将电子表格复制到驱动器中的 Google 表格中。我能够使用从小组获得的脚本从我的邮件中获取附加的 excel 电子表格,但找不到可以解压缩附件然后获取 excel 电子表格的脚本。下面是我正在处理的脚本。非常感谢任何有答案的人。将不胜感激。
function getRawData() {
var threads = GmailApp.search('subject: Contract/Job Report');
var message = threads[0].getMessages()[0];
var attachment = message.getAttachments()[0];
var xlsxBlob = attachment; // Is supposes that attachment[0] is the blob of xlsx file.
var convertedSpreadsheetId = Drive.Files.insert({mimeType: MimeType.GOOGLE_SHEETS}, xlsxBlob).id;
var sheet = SpreadsheetApp.openById(convertedSpreadsheetId).getSheets()[0].deleteRow(1); // There is the data in 1st tab.
var data = sheet.getDataRange().getValues();
var sheet = SpreadsheetApp.openById("1fgqDXNoUNqYHqEdUUCmZj-GAV5mEh7GSvRlZ65Bhw9M")
var sheet1 = sheet.getSheetByName("RawData");
//sheet.clearContents();
var range = sheet1.getRange(1, 1, data.length, data[0].length);
range.setValues(data);
Drive.Files.trash(convertedSpreadsheetId); // Remove the converted file.
}
解决方案
我相信你目前的情况和目标如下。
- 在您的脚本中,
attachment
ofvar attachment = message.getAttachments()[0];
是 ZIP 文件的 blob,包括 XLSX 文件。 - 您想从 ZIP 文件中检索 XLSX 文件。
修改点:
- 在这种情况下,
unzip(blob)
需要使用。这已经在评论中提到了。 - 这里,有一个重要的点。检索附件文件的 ZIP 文件时,mimeType 可能是
application/x-zip-compressed
. 在这种情况下,当unzip(blob)
使用时,会发生错误Invalid argument
。所以需要设置mimeTypeapplication/zip
。
当以上几点反映到您的脚本时,它变成如下。
修改后的脚本:
从:var attachment = message.getAttachments()[0];
var xlsxBlob = attachment; // Is supposes that attachment[0] is the blob of xlsx file.
至:
var attachment = message.getAttachments()[0];
var xlsxBlob;
var mimeType = attachment.getContentType();
if (mimeType.includes("zip")) {
attachment.setContentType(MimeType.ZIP); // or attachment.setContentTypeFromExtension();
xlsxBlob = Utilities.unzip(attachment)[0];
} else if (mimeType == MimeType.MICROSOFT_EXCEL || mimeType == MimeType.MICROSOFT_EXCEL_LEGACY) {
xlsxBlob = attachment;
}
- 在这个修改后的脚本中,当
attachment
是 zip 文件时,解压后的文件被放到xlsxBlob
. 什么时候attachment
是 XLSX 文件,attachment
被放到xlsxBlob
.
笔记:
- 在这个答案中,它假设
attachment
是var attachment = message.getAttachments()[0];
ZIP 文件的 blob,包括 XLSX 文件。请注意这一点。
参考:
推荐阅读
- php - 使用 PHP 检查目录中已使用的文件
- excel - 如何在Excel中的两个不同字符之间提取一个数字?
- xml - 在 xsi:type 值处验证 XML 时出错
- jmeter - JMeter TCP Sampler如何关闭连接
- sql - 从 clob 中选择
- excel - 重置保留输出值的表格
- node.js - “无法访问此站点”Digital Ocean 上的 Docker 容器
- php - 从 Woocommerce 中购买的产品 ID 获取最后一个订单 ID
- scala - Apache Spark:迭代数据帧行并通过 MutableList (Scala) 创建新数据帧
- php - PhpStorm 中的所有颜色看起来都被注释掉了?