簡體   English   中英

將日期列附加到從 Gmail CSV 文件導入的數組 Google Apps 腳本

[英]Append date column to array imported from Gmail CSV File Google Apps Script

我正在嘗試自動將從第三方系統(我無法在其上編輯發送的值)通過電子郵件發送的每日報告導入到 google 工作表,以隨着時間的推移創建報告。

下面的代碼可以正常工作並正確導入數據,但是 CSV 文件不包含使報告無法進行的日期。

我可以從電子郵件中獲取日期並且這再次起作用但是我無法將其附加到寫入工作表的數據中。 理想情況下,代碼會在數組的每個元素的開頭添加一個額外的條目,並帶有日期。

/**
 * import CSV data directly from gmail attachments
 */
function importCSVFromGmail() {

  var threads = GmailApp.search('subject:Agent Performance report for newer_than:1d');

  // create empty array to hold data
  var allData = [];

  // get the threads that match this search
  threads.forEach(function(thread) {

    var messageCount = thread.getMessageCount();

    // get the messages in a thread
    var messages = thread.getMessages();

    messages.forEach(function(message) {

      var attachments = message.getAttachments();

      attachments.forEach(function(attachment) {

        // check attachment is CSV
        if (attachment.getContentType() === 'text/csv') {

          // extract the data
          var csvData = Utilities.parseCsv(attachment.getDataAsString());
          var date = Utilities.formatDate(new Date(message.getDate()), "GMT+1", "MM/dd/yyyy");

          allData = allData.concat(csvData);

        }
      });  
      Logger.log(allData);
    }); 
  });

  // paste into Google Sheet
  var sheet = SpreadsheetApp.getActiveSheet();
  var lastRow = sheet.getLastRow();
  sheet.getRange(lastRow + 1, 1, allData.length, allData[0].length).setValues(allData);
}

CSV 數據樣本

Agent,Tickets assigned,Tickets resolved,Tickets reopened,Tickets reassigned,First response SLA %,Resolution SLA %,FCR %,Private notes,Responses,Average 1st response time,Average response time,Average resolution time
Agent 1,1,2,,1,,100,100,,1,,,17:32:49
Agent 2,11,14,3,,88,86,67,3,15,06:09:35,04:04:20,19:44:18
Agent 3,18,25,7,,100,80,68,6,14,01:28:29,02:35:47,74:48:48

預期輸出只是 CSV 文件中的數據,第一列是日期

DD/mm/yyyy,Agent,Tickets assigned,Tickets resolved,Tickets reopened,Tickets reassigned,First response SLA %,Resolution SLA %,FCR %,Private notes,Responses,Average 1st response time,Average response time,Average resolution time
DD/mm/yyyy,Agent 1,1,2,,1,,100,100,,1,,,17:32:49
DD/mm/yyyy,Agent 2,11,14,3,,88,86,67,3,15,06:09:35,04:04:20,19:44:18
DD/mm/yyyy,Agent 3,18,25,7,,100,80,68,6,14,01:28:29,02:35:47,74:48:48

對每一行使用Array.unshift

const csvData = Utilities.parseCsv(attachment.getDataAsString());
const date = Utilities.formatDate(message.getDate(), "GMT+1", "MM/dd/yyyy");
csvData.forEach(row => row.unshift(date));

謝謝你...我已經嘗試添加你的代碼的稍微修改的版本如下,以適應另一個將附件從 gmail 保存到谷歌驅動器的腳本。 它似乎沒有按預期添加列或文件名。 通過嘗試學習從新手那里得到的任何幫助表示贊賞!

 try { var folderName = Utilities.formatDate(messageDate, config.timezone, rule.folder.replace('%s', message.getSubject())); folderName = folderName.replace(':', ''); Logger.log("Saving to folder" + folderName); var folder = getOrCreateFolder(folderName); var file = folder.createFile(attachment); var original_attachment_name = file.getName(); var new_filename = rule.filenameTo.replace('%s', message.getSubject()).replace("%d", String(rule_counter++)).replace('%o', original_attachment_name) //the following 2 lines of code have been added to try to add the filename to the first column in the csv file. const csvData = Utilities.parseCsv(attachment.getDataAsString()); csvData.forEach(row => row.unshift("yyyy-MM-dd-'%o'")); //GW added this line to try to add the file name to the first column of the csv file being processed. if (rule.filenameFrom && rule.filenameTo && rule.filenameFrom == file.getName()) { var final_attachment_name = Utilities.formatDate(messageDate, config.timezone, new_filename); Logger.log("INFO: Renaming matched file '" + file.getName() + "' -> '" + final_attachment_name + "'"); file.setName(final_attachment_name);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM