Google apps script 将XLSX文件从每月电子邮件(Gmail格式)导入指定的Google工作表

Google apps script 将XLSX文件从每月电子邮件(Gmail格式)导入指定的Google工作表,google-apps-script,google-sheets,import,google-drive-api,Google Apps Script,Google Sheets,Import,Google Drive Api,我定期从我们的客户那里收到一个XLSX文件,我想自动将它从Gmail(自动标记)导入谷歌表单。到目前为止,我设法使它适用于CSV文件,但XLSX文件似乎更棘手。有人能帮我调整CSV文件的代码吗 函数getCSV() { var-thread=GmailApp.getUserLabelByName('协调').getThreads(0,1); var messages=线程[0]。getMessages(); var len=messages.length; var message=message

我定期从我们的客户那里收到一个XLSX文件,我想自动将它从Gmail(自动标记)导入谷歌表单。到目前为止,我设法使它适用于CSV文件,但XLSX文件似乎更棘手。有人能帮我调整CSV文件的代码吗

函数getCSV() { var-thread=GmailApp.getUserLabelByName('协调').getThreads(0,1); var messages=线程[0]。getMessages(); var len=messages.length; var message=messages[len-1]//获取最后一条消息 var attachments=message.getAttachments();//获取第一封邮件的附件 var csv=附件[0]。getDataAsString(); var data=Utilities.parseCsv(csv); var sheet=SpreadsheetApp.openById(“某些id”).getSheetByName(“数据”); sheet.clearContents(); var range=sheet.getRange(1,1,data.length,data[0].length); 范围。设置值(数据); }
  • 您希望将xlsx文件中附加到电子邮件的数据放入现有电子表格
如果我的理解是正确的,这次修改怎么样?请把这看作是几个答案中的一个

使用此脚本时,请在高级Google服务和API控制台启用驱动器API。您可以在上看到这一点。

修改脚本的流程:
  • 检索xlsx文件的blob
  • 将xlsx格式转换为谷歌电子表格
  • 从转换后的电子表格中检索值
  • 删除已转换的文件
  • 将值放入现有电子表格中的
    数据表中
  • 修改脚本: 请修改如下

    发件人: 致: 注:
    • 在这个修改中,它假设了以下几点。如果您的情况与以下几点不同,请修改它。
    • 附件[0]
      是xlsx文件的blob
    • 关于xlsx文件,您要放入的数据位于第一个选项卡中
    参考:

    如果我误解了你的问题,而这不起作用,我道歉。

    Apps脚本没有任何内置的读取Excel文件的方法。您需要使用驱动器API将Excel附件转换为驱动器文件,
    convert
    选项设置为“true”。然后,您需要访问转换后的Google Sheets文件,并使用标准的
    SpreadsheetApp
    功能(或Sheets API)获取所需的数据。@Max感谢您的回复。我很高兴你的问题解决了。
    var csv =  attachments[0].getDataAsString();
    var data = Utilities.parseCsv(csv);
    
    var xlsxBlob = attachments[0]; // Is supposes that attachments[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]; // There is the data in 1st tab.
    var data = sheet.getDataRange().getValues();
    Drive.Files.remove(convertedSpreadsheetId); // Remove the converted file.