首页 > 解决方案 > 从 Gmail 到 Google 表格的 XLSX:无效的 mime 类型。内容类型似乎是应用程序/八位字节?

问题描述

我正在尝试使用 Google Apps 脚本将一个 xlsx 文件从 Gmail 附件导入到 Google Drive(作为 Google Sheet)。我尝试在 GAS 中使用 Advanced Drive API,但这样做会导致此错误:

对 drive.files.insert 的 API 调用失败并出现错误:提供的 mime 类型无效

我发现 Gmail 附件作为 application/octet 而不是 application/vnd.ms-excel 导入到 Google Apps 脚本,我认为这是问题所在。但是,附件是一个 xlsx 文件,我不明白为什么它会被识别为应用程序/八位字节。

请记住,我想将 XLSX 转换为 Google 表格。因此我需要 MimeType。这是代码:

 var mail  = GmailApp.search("XXXXXXX")[0];
  var msg = mail.getMessages()[0]
  var attachment = msg.getAttachments()[0];
  var blob =attachment
  var name = attachment.getName();
  var folderId = 'XXXXXX'; 

  var file = {
    title: 'Converted Spreadsheet',
   parents: [{id: folderId}],
    mimeType: MimeType.GOOGLE_SHEETS
  };
  file = Drive.Files.insert(file, blob, {convert: true})

有谁知道如何修复错误或找到另一种方法将此 XLSX 转换为工作表?谢谢!

标签: google-apps-scriptgoogle-sheetsgoogle-drive-apigmailxlsx

解决方案


  • blob在您的情况下,附件文件的 mimeType是application/octet.
  • blob实际上是一个 XLSX 文件。
  • blobofapplication/octet与 一起使用时Drive.Files.insert(),会发生错误Invalid mime type provided
  • 您想将上述 blob 的 XLSX 文件转换为 Google 电子表格并将其创建为文件。
  • 您想使用 Google Apps 脚本实现此目的。

如果我的理解是正确的,这个答案怎么样?请认为这只是几个可能的答案之一。

问题和解决方法:

  • 当 mimeTypeblob为 时application/octet
    • Drive.Files.insert({title: 'Converted Spreadsheet', parents: [{id: "root"}], mimeType: MimeType.GOOGLE_SHEETS}, blob, {convert: true})运行时,出现错误Invalid mime type provided
    • 运行时Drive.Files.insert({title: 'Converted Spreadsheet', parents: [{id: "root"}]}, blob, {convert: true}),不会出现错误。但是创建文件的 mimeType 是application/octet. 这样,该文件就无法直接在 Google Drive 上打开。在这种情况下,需要将创建文件的 mimeType 更改为 XLSX。我认为这是由于This field can be left blank, and the mimetype will be determined from the uploaded content's MIME type.参考

从上述情况来看,在这个答案中,我想建议将 XLSX 的 mimeType 设置为运行blob之前Drive.Files.insert

修改后的脚本:

当您的脚本被修改时,请进行如下修改。

从:

var blob =attachment

至:

var blob = attachment.setContentType(MimeType.MICROSOFT_EXCEL);  // MimeType.MICROSOFT_EXCEL or MimeType.MICROSOFT_EXCEL_LEGACY

或者

至:

如果blob有带扩展名的文件名,您也可以使用以下脚本。在这种情况下,mimeType 由文件名的扩展名自动给出。

var blob = attachment.setContentTypeFromExtension();

笔记:

  • 在上面修改过的脚本中,有无mimeType: MimeType.GOOGLE_SHEETSin的结果是一样的file
  • 在你的问题中,你说an xlsx file from a Gmail Attachment。你说the Gmail attachment is imported to Google Apps Script as application/octet instead of application/vnd.ms-excel
    • 如果文件是 XLSX 文件,则 mimeType 是application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.
    • 如果文件是 XLS 文件,则 mimeType 是application/vnd.ms-excel.

参考:

如果这没有解决您的问题,我深表歉意。


推荐阅读