google-apps-script - 从 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 转换为工作表?谢谢!
解决方案
blob
在您的情况下,附件文件的 mimeType是application/octet
.blob
实际上是一个 XLSX 文件。- 当
blob
ofapplication/octet
与 一起使用时Drive.Files.insert()
,会发生错误Invalid mime type provided
。 - 您想将上述 blob 的 XLSX 文件转换为 Google 电子表格并将其创建为文件。
- 您想使用 Google Apps 脚本实现此目的。
如果我的理解是正确的,这个答案怎么样?请认为这只是几个可能的答案之一。
问题和解决方法:
- 当 mimeType
blob
为 时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_SHEETS
in的结果是一样的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
.
- 如果文件是 XLSX 文件,则 mimeType 是
参考:
如果这没有解决您的问题,我深表歉意。
推荐阅读
- azure - Azure AD Connect - 更改 sourceanchor
- python-3.x - request.args 中的烧瓶可选参数
- c# - 如何使 sql 选择动态字符串比较起作用?
- ios - 在 TabBarController 之间共享 UIViewController 实例
- python - 未找到带有参数 '('',)' 的 'user' 的反向操作。尝试了 1 种模式:['project/users/(?P
[0-9]+)/$'] - javascript - 您好我想仅通过过滤器功能过滤嵌套数组中的数据
- java - 如何在 Java 中实现多对多关系?
- node.js - React 编译错误“尝试导入错误:'./registerServiceWorker' 不包含默认导出(导入为'registerServiceWorker')。”
- java - 如何将 Apache Camel 路由到内存中的 ActiveMQ JMS 队列
- mysql - MySQL程序检查下一个空闲值