Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google apps script 从Gmail到Google Sheets的XLSX:无效的mime类型。内容类型似乎是应用程序/八位字节?_Google Apps Script_Google Sheets_Google Drive Api_Gmail_Xlsx - Fatal编程技术网

Google apps script 从Gmail到Google Sheets的XLSX:无效的mime类型。内容类型似乎是应用程序/八位字节?

Google apps script 从Gmail到Google Sheets的XLSX:无效的mime类型。内容类型似乎是应用程序/八位字节?,google-apps-script,google-sheets,google-drive-api,gmail,xlsx,Google Apps Script,Google Sheets,Google Drive Api,Gmail,Xlsx,我正在尝试使用GoogleApps脚本将一个xlsx文件从Gmail附件导入GoogleDrive(作为GoogleSheet)。我尝试在GAS中使用Advanced Drive API,但这样做会导致以下错误: API调用drive.files.insert失败,错误为:mime类型无效 提供 我发现Gmail附件是作为application/octet而不是application/vnd.ms-excel导入到GoogleApps脚本的,我认为这就是问题所在。然而,附件是一个xlsx文件,我

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

API调用drive.files.insert失败,错误为:mime类型无效 提供

我发现Gmail附件是作为application/octet而不是application/vnd.ms-excel导入到GoogleApps脚本的,我认为这就是问题所在。然而,附件是一个xlsx文件,我不明白为什么它会被识别为application/octet

请记住,我想将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转换为工作表? 谢谢

这些

parents: [{id: folderId}],
mimeType: MimeType.GOOGLE_SHEETS
请参阅输入文件。看见你应该跳过这些

这段代码对我来说适用于Google Drive API v2:

function abc() {
  var mail = GmailApp.search("SEARCH_TERM")[0];
  var msg = mail.getMessages()[0];
  var blob = msg.getAttachments()[0];
  var file = {
    title: 'Converted Spreadsheet'
  };
  Drive.Files.insert(file, blob, {convert: true});
}
  • 在您的情况下,附件文件的
    blob
    的mimeType是
    application/octet
  • blob
    实际上是一个XLSX文件
  • application/octet
    blob
    Drive.Files.insert()
    一起使用时,出现提供的
    无效mime类型的错误
  • 您希望将上述blob的XLSX文件转换为Google电子表格,并将其创建为文件
  • 您希望使用谷歌应用程序脚本实现这一点
如果我的理解是正确的,那么这个答案呢?请把这看作是几个可能的答案之一

问题和解决方法:
  • blob
    的mimeType为
    application/octet
    时,
    • 当运行
      Drive.Files.insert({title:'Converted Spreadsheet',parents:[{id:'root}],mimeType:mimeType.GOOGLE\u SHEETS},blob,{convert:true})
      时,出现提供的
      无效mime类型的错误
    • 当运行
      Drive.Files.insert({title:'Converted Spreadsheet',父项:[{id:'root}]},blob,{convert:true})
      时,不会发生错误。但是创建的文件的mimeType是
      application/octet
      。这样,文件就不能直接在谷歌硬盘上打开。在这种情况下,需要将已创建文件的mimeType更改为XLSX。我认为这是因为
      这个字段可以留空,mimetype将根据上传内容的MIME类型确定。
根据上述情况,在这个答案中,我建议在运行
Drive.Files.insert
之前,将XLSX的mimeType设置为
blob

修改脚本: 修改脚本时,请按以下方式修改

发件人: 致: 或

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

var blob = attachment.setContentTypeFromExtension();
注:
  • 在上面修改的脚本中,使用和不使用
    mimeType:mimeType.GOOGLE\u SHEETS
    文件中的结果是相同的
  • 在你的问题中,你说的是来自Gmail附件的xlsx文件。你说,Gmail附件作为application/octet而不是application/vnd.ms excel导入谷歌应用程序脚本。
    • 如果文件是XLSX文件,则mimeType是
      application/vnd.openxmlformats officedocument.spreadsheetml.sheet
    • 如果fie是XLS文件,则模拟类型为
      application/vnd.ms excel
参考资料:

如果这不能解决您的问题,我很抱歉。

请尝试删除mimetype值。
var blob = attachment.setContentType(MimeType.MICROSOFT_EXCEL);  // MimeType.MICROSOFT_EXCEL or MimeType.MICROSOFT_EXCEL_LEGACY
var blob = attachment.setContentTypeFromExtension();