Google 将 .xlsm 文件传输到 GSheet 时出现 Apps 脚本错误 'Bad Request'
Google Apps Script error 'Bad Request' when transferring a .xlsm-file to a GSheet
我的收件箱中有一个 Excel-文件 (.xlsm) 作为 Gmail 附件,我想将其传输到 GDrive。它应该保存为 GSheet。我正在尝试使用 Apps 脚本自动执行此过程。
不幸的是,我在启动脚本时遇到错误。 (API 对 drive.files.insert 的调用失败,出现错误:错误请求) 这很奇怪,因为脚本运行了几次并且文件可以毫无问题地转换。上周,当我将带有附件的邮件转发给某人时,它就起作用了(不要问我上下文在哪里)。但是现在,这一切都成为历史,我不知道如何修复错误。
我是 Whosebug 的新手,我非常期待您的每一个回答。非常感谢。
代码如下:
function importFunction() {
var threads = GmailApp.search('CC520_Report_Lukas_GAS_ABC');
var messages = threads[0].getMessages();
var message = messages[0];
var attachment = message.getAttachments()[0];
var resource = {
title: 'NewFileLukas',
mimeType: MimeType.GOOGLE_SHEETS,
parents: [{id: 'xxxxx6BD1SIfI0Cz5bmGahzSlHUxxxxxx'}],
};
var insert = Drive.Files.insert(resource, attachment); // Here comes the error.
我相信你的目标如下。
- 您想将
.xlsm
文件转换为 Google 电子表格。
attachment
您使用的是.xlsm
文件。
- 在您的情况下,
API call to drive.files.insert failed with error: Bad Request
的错误发生在 Drive.Files.insert(resource, attachment)
。
- 您想删除此错误。
为此,这个答案怎么样?我也遇到过同样的问题。
修改点:
.xlsm
文件的 mimeType 是 application/vnd.ms-excel.sheet.macroenabled.12
。在您的脚本中,当使用 console.log(attachment.getContentType())
时,如果 attachment
是 .xlsm
文件,则返回此类 mimeType。
- 当
importFormats
在DriveAPIRef中用"About: get"的方法确认后,好像application/vnd.ms-excel.sheet.macroenabled.12
可以转换成application/vnd.google-apps.spreadsheet
.这可以在 Drive API v2 和 v3 中看到。
- 但是,当
application/vnd.ms-excel.sheet.macroenabled.12
数据被用于Drive.Files.insert(resource, attachment)
时,会出现错误。在这种情况下,我确认即使我使用 Drive API v3 对此进行测试,也会出现同样的问题。
- 我以为这个转换可能还没有反映出来。另外我相信在以后的更新中会对此进行修改。
因此,作为当前的解决方法,我建议通过更改 blob 的 mimeType 将 .xlsm
文件转换为 Google 电子表格。
修改后的脚本:
当您的脚本修改时,请修改如下。
从:
var attachment = message.getAttachments()[0];
到:
var attachment = message.getAttachments()[0].setContentType(MimeType.MICROSOFT_EXCEL);
或
var attachment = message.getAttachments()[0];
if (attachment.getContentType() == "application/vnd.ms-excel.sheet.macroenabled.12") {
attachment.setContentType(MimeType.MICROSOFT_EXCEL);
}
注:
- 在我的环境中,我可以确认通过将 mimeType 更改为
MimeType.MICROSOFT_EXCEL
,.xlsm
文件可以转换为 Google 电子表格。
- 在这种情况下,
.xlsm
文件的宏不会转换为 Google Apps 脚本。而且,在 .xlsm
文件转换为 Google 电子表格后,当 Google 电子表格转换为 excel 文件时,不包含宏。我认为这就是规范。所以请注意这一点。
参考:
我的收件箱中有一个 Excel-文件 (.xlsm) 作为 Gmail 附件,我想将其传输到 GDrive。它应该保存为 GSheet。我正在尝试使用 Apps 脚本自动执行此过程。
不幸的是,我在启动脚本时遇到错误。 (API 对 drive.files.insert 的调用失败,出现错误:错误请求) 这很奇怪,因为脚本运行了几次并且文件可以毫无问题地转换。上周,当我将带有附件的邮件转发给某人时,它就起作用了(不要问我上下文在哪里)。但是现在,这一切都成为历史,我不知道如何修复错误。
我是 Whosebug 的新手,我非常期待您的每一个回答。非常感谢。
代码如下:
function importFunction() {
var threads = GmailApp.search('CC520_Report_Lukas_GAS_ABC');
var messages = threads[0].getMessages();
var message = messages[0];
var attachment = message.getAttachments()[0];
var resource = {
title: 'NewFileLukas',
mimeType: MimeType.GOOGLE_SHEETS,
parents: [{id: 'xxxxx6BD1SIfI0Cz5bmGahzSlHUxxxxxx'}],
};
var insert = Drive.Files.insert(resource, attachment); // Here comes the error.
我相信你的目标如下。
- 您想将
.xlsm
文件转换为 Google 电子表格。 attachment
您使用的是.xlsm
文件。- 在您的情况下,
API call to drive.files.insert failed with error: Bad Request
的错误发生在Drive.Files.insert(resource, attachment)
。- 您想删除此错误。
为此,这个答案怎么样?我也遇到过同样的问题。
修改点:
.xlsm
文件的 mimeType 是application/vnd.ms-excel.sheet.macroenabled.12
。在您的脚本中,当使用console.log(attachment.getContentType())
时,如果attachment
是.xlsm
文件,则返回此类 mimeType。- 当
importFormats
在DriveAPIRef中用"About: get"的方法确认后,好像application/vnd.ms-excel.sheet.macroenabled.12
可以转换成application/vnd.google-apps.spreadsheet
.这可以在 Drive API v2 和 v3 中看到。- 但是,当
application/vnd.ms-excel.sheet.macroenabled.12
数据被用于Drive.Files.insert(resource, attachment)
时,会出现错误。在这种情况下,我确认即使我使用 Drive API v3 对此进行测试,也会出现同样的问题。 - 我以为这个转换可能还没有反映出来。另外我相信在以后的更新中会对此进行修改。
- 但是,当
因此,作为当前的解决方法,我建议通过更改 blob 的 mimeType 将 .xlsm
文件转换为 Google 电子表格。
修改后的脚本:
当您的脚本修改时,请修改如下。
从:var attachment = message.getAttachments()[0];
到:
var attachment = message.getAttachments()[0].setContentType(MimeType.MICROSOFT_EXCEL);
或
var attachment = message.getAttachments()[0];
if (attachment.getContentType() == "application/vnd.ms-excel.sheet.macroenabled.12") {
attachment.setContentType(MimeType.MICROSOFT_EXCEL);
}
注:
- 在我的环境中,我可以确认通过将 mimeType 更改为
MimeType.MICROSOFT_EXCEL
,.xlsm
文件可以转换为 Google 电子表格。 - 在这种情况下,
.xlsm
文件的宏不会转换为 Google Apps 脚本。而且,在.xlsm
文件转换为 Google 电子表格后,当 Google 电子表格转换为 excel 文件时,不包含宏。我认为这就是规范。所以请注意这一点。