首页 > 解决方案 > 从邮件附件中的压缩文件中获取电子表格

问题描述

我需要一个脚本来获取并打开一个压缩附件,这样我就可以将电子表格复制到驱动器中的 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.

}

标签: google-apps-script

解决方案


我相信你目前的情况和目标如下。

  • 在您的脚本中,attachmentofvar attachment = message.getAttachments()[0];是 ZIP 文件的 blob,包括 XLSX 文件。
  • 您想从 ZIP 文件中检索 XLSX 文件。

修改点:

  • 在这种情况下,unzip(blob)需要使用。这已经在评论中提到了。
  • 这里,有一个重要的点。检索附件文件的 ZIP 文件时,mimeType 可能是application/x-zip-compressed. 在这种情况下,当unzip(blob)使用时,会发生错误Invalid argument。所以需要设置mimeType application/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.

笔记:

  • 在这个答案中,它假设attachmentvar attachment = message.getAttachments()[0];ZIP 文件的 blob,包括 XLSX 文件。请注意这一点。

参考:


推荐阅读