Импортировать CSV по имени в листы Google - PullRequest
0 голосов
/ 29 октября 2018

Я использовал следующую функцию для загрузки CSV-вложений в листы Google:

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);
}
}

}
}

и, кажется, ничего не происходит. я не получаю никаких ошибок, но, похоже, ничего не делает?

1 Ответ

0 голосов
/ 30 октября 2018

Это утверждение:

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
    }

}
...