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



我定期从我们的客户那里收到一个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);
}
您希望将
  • 附加到电子邮件的 xlsx 文件中的数据放入现有电子表格。

如果我的理解是正确的,那么这个修改怎么样?请把这看作是几个答案之一。

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

修改脚本的流程:

  1. 检索 xlsx 文件的 blob。
  2. 将 xlsx 格式转换为谷歌电子表格。
  3. 从转换后的电子表格中检索值。
  4. 删除转换后的文件。
  5. 将值放入现有电子表格中的Data表中。

修改后的脚本:

请修改如下。

从:
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.

注意:

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

参考:

  • 文件:插入驱动器 API v2

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

最新更新