【问题标题】:Append date column to array imported from Gmail CSV File Google Apps Script将日期列附加到从 Gmail CSV 文件 Google Apps 脚本导入的数组
【发布时间】:2020-04-16 09:24:10
【问题描述】:

我正在尝试自动导入从第三方系统通过电子邮件发送的每日报告(我无法编辑发送的值)到谷歌表格,以便随着时间的推移创建报告。

以下代码可以正常工作并正确导入数据,但 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

【问题讨论】:

  • 你能显示预期的输出吗?
  • 当然,我刚刚添加了。它只是将电子邮件日期作为数据中的第一列。我不担心这会在标题行中添加特定日期,因为这将被过滤掉

标签: arrays csv google-apps-script multidimensional-array google-sheets


【解决方案1】:

使用Array.unshiftfor each 行:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-18
    • 1970-01-01
    • 2012-08-20
    • 2021-08-28
    相关资源
    最近更新 更多