繁体   English   中英

使用 Google Apps 脚本将 gmail 中的数据提取到电子表格中

[英]Extracting data from gmail into a spreadsheet using Google Apps scripts

案例:我通过 email 收到有关个人安全系统评估工作的通知。 这就是它们的样子(由于隐私法,我把一些部分涂黑了)在这里输入图片描述

我想通过 Google Apps 脚本(javascript 语言)从这个 email 中提取一些信息到 google 表格

到目前为止,我只能使用以下代码将日期从 email 提取到 Google 表格中:

function onOpen(e){
  
    ui.createMenu("Tessa").addItem("Get Emails by Label", "getGmailEmails").addToUi();  //create button in google sheets, which will be used to add information from incoming emails to Google sheets. 
  
}

function getGmailEmails(){
  var label = GmailApp.getUserLabelByName("tobeprocessed");    //get emails with label 'tobeprocessed' (could also be another name).
  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];
      if (message.isUnread()){
        extractDetails(message);
        GmailApp.markMessageRead(message);
      }
    }
    threads[i].removeLabel(label);   //delete label after processing the message, so that it won't be added twice (or more if you press the button again)
    
  }
  
}

function extractDetails(message){
  
  var emailData = {
    Locatie: "Null",
    Score: "Null",
    Datum: "Null",
    Opmerking: "Null",
  }
  var emailKeywords = {
    Locatie: "",
    Score: " ",
    Opmerking: "",
  }
  
  emailData.Datum = message.getDate();

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

有人可以帮我解决这个问题吗? 提前致谢!

您可以使用getPlainBody()获取 email 正文中的消息,它返回包含正文内容的字符串。

在那之后,一种检索身体碎片的方法是使用正则表达式

function extractDetails(message){
  var emailData = {
    Locatie: "Null",
    Score: "Null",
    Datum: "Null",
    Opmerking: "Null",
  }
  
  emailData.Datum = message.getDate();

  // Get the email's body
  var body = message.getPlainBody();
  //var body = 'Reno Vught van Heikant heeft een MIRS-melding gemaakt waarin het functioneren van het persoonsbeveiliging systeem werd beoordeeld met een 3.Toelichting melder: gaf locatie woonkamer aan terwijl ik bijna op de boerderij was. ik kwam vanuit de woonkamer rennen.Beschrijving incident: bij binnenkomst gebeurde er dit. en toen dit';

  // Retrieves everything between "van " and " heeft"
  var locatieRegex = /van (.*?) heeft/s;
  var match = body.match(locatieRegex);
  if (match.length > 1) {
    emailData.Locatie = match[1];
  } 

  // Retrieves everything between "met een " and a period (.)
  var scoreRegex = /met een (.*?)\./s;
  match = body.match(scoreRegex);
  if (match.length > 1) {
    emailData.Score = match[1];
  } 

  // Retrieves everything between "Toelichting melder: " and "Beschrijving incident:"
  var opmerkingRegex = /Toelichting melder: (.*?)Beschrijving incident:/s; 
  match = body.match(opmerkingRegex);
  if (match.length > 1) {
    emailData.Opmerking = match[1];
  }


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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM