微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Google Apps脚本Google表格Gmail处理新电子邮件的追加行数组 答案:结构信息:特定于代码的修复程序:

如何解决Google Apps脚本Google表格Gmail处理新电子邮件的追加行数组 答案:结构信息:特定于代码的修复程序:

我要从gmail接收电子邮件,然后使用jquery对其进行解析,然后要将每封电子邮件中的抓取数据发送到Google工作表中的单独行中。我的代码可以工作到可以抓取必要数据的程度,然后将其推入数组。然后,我想检查是否有重复项,如果现有的Google工作表行中有任何匹配项,如果没有,则将数据放入工作表中的行中。

我使用以下帖子作为数组部分的模型,但无法获得他为我的数据所做的工作: Google script is reprocessing emails

对于将数组转储到工作表中的任何见解,我将不胜感激。我将用来检查重复项的唯一值是该人的姓名(无名),即电子表格中的第3列

function appendLead() {
    var url = 'https://docs.google.com/spreadsheets/d/1zZDKMISf8Hbw7ERfP6h-Q0pztQSMqsN-mHfeM3E_Ywg/edit#gid=0';
    var ss = SpreadsheetApp.openByUrl(url);
    var leadsData = ss.getSheetByName('Leads Data');
    var myLabel = "Buyer Inquiries/1. To Process"; // Name of current label being processed,this label is set via a filter in Gmail
    var newLabel = "Buyer Inquiries/2. Processed"; // Name of "New" filter,this label needs to be created in Gmail first
    var label = GmailApp.getUserLabelByName(myLabel);
    var label2 = GmailApp.getUserLabelByName(newLabel);
    var threads = label.getThreads();
    var data2 = [];
    var newData = [];
  
    for (var i = 0; i< threads.length; i++) {
      var message = GmailApp.getMessagesForThread(threads[i])[0];
      
    
      // move thread from label to label2
      label2.addToThread(threads[i]);
      label.removeFromThread(threads[i]);
      
      var messageBodyhtml = message.getBody()
      
      var $ = Cheerio.load(messageBodyhtml);
      var date = $('span:contains("Date:")').siblings('span').text().trim();
      var property = $('span:contains("Regarding:")').siblings('span').text().trim();
      var name = $('span:contains("From:")').first().siblings('span').text().trim();
      var phone = $('span:contains("Contact information:")').siblings('span').children().first().text().trim();
      var email = $('span:contains("Contact information:")').siblings('span').children().last().text().trim();
      var comments = $('span:contains("Comments:")').siblings('span').text().trim();
      var source = $('span:contains("Lead From:")').siblings('span').text().trim();
  
      var array = [date,property,name,phone,email,comments,source]
      Logger.log(array);
      data2.push([array[i]]);
    }
    // Compare the information in the data2 array to existing information in the sheet
    var data = leadsData.getRange("A2:G").getValues(); //Change this to fit your data ranges
    for(i in data2){
      var row = data2[i];
      var duplicate = false;
      for(j in data){
        if(row.join() == data[j].join()){
          duplicate = true;
        }
      }
      if(!duplicate){
        newData.push(row);
      }
    }
    if (newData.length){  // runs the below code only if there is newData,this stops an error when newData is empty
      leadsData.getRange(leadsData.getLastRow()+1,1,newData.length,newData[0].length).setValues(newData); //writes newData to end of sheet
    }
}

这是运行后在工作表上的结果-仅将第一个数组段粘贴在工作表上-并没有作为行粘贴-而是粘贴到了下一行

10/19/2020 9:51:16 AM
address
Sandra

email@gmail.com
ACTION: Tour Request 10/03/2020 10:00AM   
Source website

我无法使重复检查器部分正常工作(例如,如果该行已经存在,并且我再次将相同的电子邮件作为测试进行处理,即使该记录是重复的,信息也会作为电子表格的一行附加在电子表格中)

var data = leadsData.getRange("A2:G").getValues(); //Change this to fit your data ranges
    data.forEach(function(row) {
      var duplicate = false;
      data2.forEach(function(row2) {
        if (row.join() == row2.join()) {
          duplicate = true;
        }
      });
      if (!duplicate) {
        newData.push(row);
      }
    });

解决方法

答案:

用于将值设置为电子表格范围的数组结构为Array[rows][columns]

结构信息:

假设您要使用.setValues()将两行数据插入到工作表中。

第1行的数据长度为8个单元格,每个单元格都是v1-v8中的值。 第2行的数据长度也为8个像元,但只有A,B,G和H列有数据。

数组结构应如下:

var arr = [
            ["v1","v2","v3","v4","v5","v6","v7","v8"],// row 1
            ["A-v","B-v","","G-v","H-v"]      // row 2
          ];

这需要设置为:

SpreadsheetApp.getActiveSpredsheet()
              .getSheetByName("Sheet-name")
              .getRange("A1:B8")
              .setValues(arr);

这将在工作表中显示为:

         |    A   |    B   |    C   |    D   |    E   |    F   |    G   |    H   |    
=========+========+========+========+========+========+========+========+========+
    1    |   v1   |   v2   |   v3   |   v4   |   v5   |   v6   |   v7   |   v8   |
---------+--------+--------+--------+--------+--------+--------+--------+--------+
    2    |   A-v  |  B-v   |        |        |        |        |  G-v   |  H-v   |
---------+--------+--------+--------+--------+--------+--------+--------+--------+
    3    |        |        |        |        |        |        |        |        |
---------+--------+--------+--------+--------+--------+--------+--------+--------+
    4    |        |        |        |        |        |        |        |        |
---------+--------+--------+--------+--------+--------+--------+--------+--------+

特定于代码的修复程序:

使用嵌套的forEach()而不是for... in

data.forEach(function(row) {
  var duplicate = false;
  data2.forEach(function(row2) {
    if (row.join() == row2.join()) {
      duplicate = true;
    }
  });
  if (!duplicate) {
    newData.push(row);
  }
});

我希望这对您有帮助!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。