我定期从客户端收到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服务和API控制台中启用Drive API。你可以在here看到这个。
Data
工作表中。请修改如下。
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.
attachments[0]
是xlsx文件的blob。
关于xlsx文件,您要放置的数据位于第一个选项卡中。如果我误解了你的问题并且这不起作用,我道歉。