2016-09-21 5 views
0

Я создал процесс отправки CSV-файлов из нашего ERP-аккаунта в учетную запись GA и применения ярлыка к. Я хотел бы проанализировать вложения и обновить электронную таблицу, которая будет использоваться в качестве источника данных для другого проекта GA. Я всегда нажимаю на внутренние петли, когда пытаюсь что-то сделать, потому что, возможно, мой мозг подключен. В основном я набор вкладки в таблице и набор статических имен вложенных файлов CSV, как так:Обновление таблицы с помощью вложений электронной почты

*//Static array values will never change 
    var sheetNames = ["Wage Codes", "Phase Codes", "Cost Types", "Department"] 
    var csvName = ["Wage_Codes.csv", "Phase_Codes.csv", "Cost_Types.csv", "Department_Codes.csv"]* 

Я хотел бы Переберите каждый массив импорта данных из csvName и установками значения ячеек в sheetNames

я могу получить массивы из вложенных файлов CSV и читать их в Logger, используя это:

var label = "Timesheet Data" 

Var нить = GmailApp.getUserLabelByName (ярлык) .getThreads();

// Статические значения массива не изменится вар sheetNames = [ "Наемные коды", "Фазовые коды", "Виды затрат", "Отдел"] вар csvName = [ "Wage_Codes.csv", «Phase_Codes. CSV», "Cost_Types.csv", "Department_Codes.csv"]

//strip CSV attachemnts from emails and put in GDrive 
    var count = thread[0].getMessageCount(); 
    for (var i = 0 ; i < count; i++) { 
    var attachments = thread[0].getMessages()[i].getAttachments()[0]; 
    var csvData = Utilities.parseCsv(attachments.getDataAsString(), ","); 

    Logger.log(csvData); 

И я могу сделать это на индивидуальной основе скачанный с помощью этого:

function importDeptCodes() { 
    var ss = SpreadsheetApp.openById('sheetID').getSheetByName('Cost Types'); 
    var file = DriveApp.getFilesByName('Cost_Types.csv').next(); 
    var arry = Utilities.parseCsv(file.getBlob().getDataAsString()); 
    ss.getRange(1, 1, arry.length, arry[0].length).setValues(arry); 
    Logger.log(arry) 
} 

Собираем во внутреннюю петлю в первый пример кода - это то, где мой мозг громко свистеет.

, используя следующий код она импортирует все 4 раз, когда Yhe J цикл на один уровень вверх, и это только импорт в ВСЕМУ в универмаге листа так, как это теперь

function importCodes() { 
    var sheetNames = ["Wage Codes", "Phase Codes", "Cost Types", "Department"] 
    var csvName = ["Wage_Codes.csv", "Phase_Codes.csv", "Cost_Types.csv", "Department_Codes.csv"] 
    var ss = SpreadsheetApp.openById('sheetID'); 

    for (var i = 0; i < sheetNames.length; i++) { 
    var ss = SpreadsheetApp.openById('sheetID'); 
    var sheet = ss.getSheetByName(sheetNames.valueOf()[i]); 

     Logger.log(sheet.getName()) 
} 
    for (var j=0; j < csvName.length; j++) { 
    var file = DriveApp.getFilesByName(csvName.valueOf()[j]).next(); 
    var arry = Utilities.parseCsv(file.getBlob().getDataAsString()); 
    sheet.getRange(1, 1, arry.length, arry[0].length).setValues(arry); 
    Logger.log(sheet) 
    } 

} 
+0

После того, как файл CSV из вложения, вы можете программно импортировать данные из CSV-файла в Диске в существующий лист Google с помощью Google Apps Script, заменив/добавления данных по мере необходимости. Чтобы помочь вам в реализации, проверьте импорт данных в этом сообщении SO - [Как автоматически импортировать данные из загруженного CSV или XLS-файла в Google Таблицы] (http://stackoverflow.com/questions/26854563/how- к автоматически-импорт-данных-из-закачано-CSV или XLS-файл-в-Google-листов). Надеюсь, поможет! – Teyam

ответ

0

Вы можете получить CSV имя файла из вложения, найдите соответствующий лист и импортируйте данные.

var attachment = thread[0].getMessages()[i].getAttachments()[0]; 
    var fileIndex = csvName.indexOf(attachment.getName()); 
    if (fileindex !== -1) { 
    var sheet = ss.getSheetByName(sheetNames[fileIndex]); 
    // write the import code here 
    } 
+0

Я смущен. Я получил эту идею от вашего блога Amit, просто имея проблемы с его внедрением. – Rockn

+0

Amit пинает задницу! –

+0

Спасибо Amit! Все это разобралось без кормления ложкой. Работает как чемпион. – Rockn

Смежные вопросы