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

时间:2019-04-03 12:14:22

标签: google-apps-script import google-sheets google-sheets-macros

我会定期从客户那里收到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);
}

1 个答案:

答案 0 :(得分:1)

  • 您要将来自电子邮件附件的xlsx文件中的数据放入现有的电子表格中。

如果我的理解是正确的,那么该修改如何?请认为这只是几个答案之一。

使用此脚本时,请在Advanced Google Services和API控制台上启用Drive API。您可以在here上看到有关的信息。

修改后的脚本流程:

  1. 检索xlsx文件的斑点。
  2. 将xlsx格式转换为Google Spreadsheet。
  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文件,要放置的数据位于第一个标签中。

参考:

如果我误解了您的问题,但是这没有用,我表示歉意。