如何使过滤器功能并使每个循环不重复数据?

时间:2020-05-21 05:21:34

标签: google-apps-script google-sheets filter google-sheets-api

因此,我有一个电子表格,用于收集患者信息并将行数据发送给临床医生(如果尚未见过患者)。因此,通过下面的代码,我能够完成向临床医生发送电子邮件的提示,以提防他们去拜访患者。但这是问题所在。这就是我不明白的地方。

假设我有以下数据:

enter image description here

当我收到所有这些患者的电子邮件后,将其发送给1位临床医生。电子邮件无顺序地进入收件箱。例如,我会先收到罗兰的电子邮件,然后是约翰的电子邮件,然后是杰西卡的电子邮件。但是约翰是第一张唱片。有时,我还会收到同一位患者的多封电子邮件。但是对于重复部分,我认为是因为我有一个过滤器和一个for每个循环,在这种情况下,我都需要它们。因为如果J列中没有数据,此代码将过滤行。但是,如果满足此条件,那么我需要一种方法来提取行的其余数据。但是现在我在电子邮件中收到了无序或相同记录的多个记录。

能否请您看看我的过滤器,看看是否有可以解决此问题的方法?我对这个很迷失。

谢谢。

 function selectRecords() {
      const ss = SpreadsheetApp.getActiveSheet();
      const dataRange = ss.getDataRange();
      const headers = 2;
      const dataValues = dataRange
        .offset(headers, 0, dataRange.getNumRows() - headers)//offsetting the headers from the whole range
        .getValues();

      dataValues
        .filter(row => row[9] == '') //filtered data where row[9] is empty
        .forEach(row => {
          //forEach filtered row do>
          let message =
            row[0] +
            '\n' +
            row[1] +
            '\n' +
            row[2] +
            '\n' +
            row[3] +
            '\n' +
            row[4] +
            '\n' +
            row[5]; 
          let email = row[13];
          let subject = 'Sending emails from a Spreadsheet';
          MailApp.sendEmail(email, subject, message);
          Logger.log(`${subject}: ${message} sent to ${email}`);
        });
    }

1 个答案:

答案 0 :(得分:1)

function selectRecords() {
  const ss = SpreadsheetApp.getActiveSheet();
  const dataRange = ss.getDataRange();
  const headers = 2;
  const dataValues=ss.getRange(3,1,ss.getLastRow()-2,ss.getLastColumn()).getValues();
  dataValues.forEach(function(row){
    if(row[9]=='') {
      let message =row[0] + '\n' + row[1] + '\n' + row[2] + '\n' + row[3] + '\n' + row[4] + '\n' + row[5]; 
      let email = row[13];
      let subject = 'Sending emails from a Spreadsheet';
      MailApp.sendEmail(email, subject, message);
      Logger.log(`${subject}: ${message} sent to ${email}`);
    }
  });
}