【问题标题】:Parsing Gmail data to spreadsheet creates multiple rows instead of one将 Gmail 数据解析为电子表格会创建多行而不是一行
【发布时间】:2021-09-26 01:47:06
【问题描述】:

目标:提取 gmail 并使用 RegEx 解析特定数据并将该数据放入单行

问题:不是将数据添加到单行,而是添加到多行。 getGmail 函数本身正确地将所有内容放在一行中,但是一旦我使用 extractDetails 函数运行 getGmail 函数,它就不再将数据放在一行中。下面是电子表格中脚本结果的截图

function onOpen() {
  const ui = SpreadsheetApp.getUi();
  const menu = ui.createMenu('Gmail');
  menu.addItem('Get Gmail', 'getGmail')
  menu.addToUi();
}


function getGmail(){
 
 
 
  var label = GmailApp.getUserLabelByName("Billing");
  var threads = label.getThreads();
 
  for (var i = threads.length - 1; i >=0; i--){
    var messages = threads[i].getMessages();
   
    for (var j = 0; j < messages.length; j++){
      var message = messages[j];
      extractDetails(message);
      GmailApp.markMessageRead(message);
     
    }
    threads[i].removeLabel(label);
  }
}


function extractDetails(message){
 
  var emailData = {
    date: "Null",
    sender: "Null",
    subject: "Null",
    body: "Null",
    recipient: "Null",
    amount: "Null",
    fee: "Null",
    total: "Null"
  }
 
  var emailKeywords = {
    recipient: "Recipient:*",
    amount: "Amount Sent",
    fee: "Fee",
    total: "Total Amount Charged*"
  }
 
  emailData.date = message.getDate();
  emailData.sender = message.getFrom();
  emailData.subject = message.getSubject();
  emailData.body = message.getPlainBody();
 
  var regExp;
 
  regExp = new RegExp("(?<=" + emailKeywords.recipient + ").*");
  emailData.recipient = emailData.body.match(regExp).toString().trim();
  
  regExp = new RegExp("(?<=" + emailKeywords.amount +").*[0-9]*\.[0-9]+[0-9]+");
  emailData.recipient = emailData.body.match(regExp).toString().trim();
 
  regExp = new RegExp("(?<=" + emailKeywords.fee + ").*[0-9]*\.[0-9]+[0-9]+");
  emailData.fee = emailData.body.match(regExp).toString().trim();
 
 
  var activeSheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
 
  var emailDataArr = [];
 
  for(var propName in emailData){
    emailDataArr.push(emailData[propName]);
 
 
  activeSheet.appendRow(emailDataArr);
 
  }
}

【问题讨论】:

    标签: javascript regex parsing google-apps-script gmail-api


    【解决方案1】:

    简单的修复。

    for(var propName in emailData){
        emailDataArr.push(emailData[propName]);
     
     
      activeSheet.appendRow(emailDataArr);
     
      }
    

    应该是

    for(var propName in emailData){
        emailDataArr.push(emailData[propName]);
     
      }
     activeSheet.appendRow(emailDataArr);
    

    【讨论】:

      猜你喜欢
      • 2017-01-24
      • 2018-07-30
      • 1970-01-01
      • 2019-08-22
      • 2021-11-05
      • 2012-06-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多