首页 > 解决方案 > 按名称将 CSV 导入谷歌表格

问题描述

我一直在使用以下功能将 CSV 附件加载到谷歌表格中:

function importCSVFromGmail() {
var threads = GmailApp.search("from:cbuffone123@gmail.com");
var message = threads[0].getMessages()[0];
var attachment = message.getAttachments()[0];

// Is the attachment a CSV file
if (attachment.getContentType() === "text/csv") {
    var sheet = SpreadsheetApp.getActiveSheet();
    var csvData = Utilities.parseCsv(attachment.getDataAsString(), ",");

    // Remember to clear the content of the sheet before importing new data
    sheet.clearContents().clearFormats();
    sheet.getRange(1, 1, csvData.length, csvData[0].length).setValues(csvData);
}
}

该功能当前获取从该电子邮件发送的任何附件。我想更改该功能,使其仅选择名为“data.CSV”的附件并忽略所有其他附件。有没有办法做到这一点?

先感谢您!

所以我将其修改为:

function Exact_CSV_Import() {
    var threads = GmailApp.search("from:cbuffone123@gmail.com");
    var message = threads[0].getMessages()[0];
    var attachment = message.getAttachments()[0];  
    for (var n = 0; n < attachment.length; n++) {
var attachmentName = attachments[n].getName();
if (attachmentName = "data1.csv")  
{
    // do stuff with "data1.csv"        
     attachment.setContentTypeFromExtension();  
  if (attachment.getContentType() === "text/csv") {
    var sheet = SpreadsheetApp.getActiveSheet();
    var csvData = Utilities.parseCsv(attachment.getDataAsString(), ",");
    sheet.clearContents().clearFormats();
    sheet.getRange(1, 1, csvData.length, csvData[0].length).setValues(csvData);
}
}

}
}

似乎什么也没发生。我没有收到任何错误,但它似乎没有做任何事情?

标签: csvgoogle-apps-scriptgoogle-sheetsattachment

解决方案


这个说法:

var attachment = message.getAttachments()[0];

只查看由返回的附件数组中的第一个附件.getAttachments()

而是使用var attachments = message.getAttachments();

然后,您可以遍历附件并选择您想要的附件。

该循环将打印出附件的名称及其大小;

for (var n = 0; n < attachments.length; n++) {
  Logger.log( attachments[n].getName(), attachments[n].getSize());
}

你应该可以从那里继续...

编辑:更多说明以根据要求选择性地处理不同的 CSV 文件。

我很确定attachments不是关联数组,所以你不能做像附件[“csv”]这样的事情。但是您可以遍历附件列表并挑选出您想要的名称并忽略其余的。请参阅下面的一些代码...

for (var n = 0; n < attachments.length; n++) {

    var attachmentName = attachments[n].getName();

    if (attachmentName = "data1.csv")  
    {
        // do stuff with "data1.csv"
    }
    else
    if ((attachmentName = "data2.csv")
    { 
        // do stuff with "data1.csv"
    }
    else 
    {   
        // do nothing - just skip it
    }

}

推荐阅读