将月度电子邮件(在Gmail中)中的XLSX文件导入指定的Google表格

问题描述 投票:1回答:1

我定期从客户端收到XLSX文件,我想自动将其从Gmail(自动标记)导入Google表格的过程。到目前为止,我设法使其适用于CSV文件,但XLSX文件似乎更棘手。有人可以帮我调整我对CSV文件的代码吗?

function getCSV() 
{
  var thread = GmailApp.getUserLabelByName(‘Reconciliation’).getThreads(0,1);
  var messages = thread[0].getMessages();
  var len = messages.length;
  var message=messages[len-1] //get last message
  var attachments = message.getAttachments(); // Get attachment of first message

  var csv =  attachments[0].getDataAsString();
  var data = Utilities.parseCsv(csv);

  var sheet = SpreadsheetApp.openById("some id").getSheetByName(‘Data’);
  sheet.clearContents();
  var range = sheet.getRange(1, 1, data.length, data[0].length);
  range.setValues(data);
}
google-apps-script import google-sheets google-sheets-macros
1个回答
1
投票
  • 您希望将附加到电子邮件的xlsx文件中的数据放入现有的电子表格中。

如果我的理解是正确的,那么这个修改怎么样?请将此视为几个答案中的一个。

使用此脚本时,请在高级Google服务和API控制台中启用Drive API。你可以在here看到这个。

Flow of modified script:

  1. 检索一个xlsx文件的blob。
  2. 将xlsx格式转换为Google电子表格。
  3. 从转换的电子表格中检索值。
  4. 删除转换后的文件。
  5. 将值放在现有电子表格中的Data工作表中。

Modified script:

请修改如下。

From:
var csv =  attachments[0].getDataAsString();
var data = Utilities.parseCsv(csv);
To:
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.

Note:

  • 在该修改中,它假设以下几点。如果您的情况与以下几点不同,请修改它。 attachments[0]是xlsx文件的blob。 关于xlsx文件,您要放置的数据位于第一个选项卡中。

Reference:

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

© www.soinside.com 2019 - 2024. All rights reserved.