Отправить несколько строк одному получателю на основе идентификатора электронной почты - PullRequest
0 голосов
/ 28 мая 2020

То, что я ищу:

Я работаю над электронной таблицей, содержащей информацию для нескольких поставщиков. Некоторые поставщики имеют только одну транзакцию (1 строку информации), в то время как другие могут иметь несколько транзакций (строки информации). Пока что код, над которым я работаю, может отправлять электронное письмо, содержащее одну транзакцию для каждого электронного письма.

Однако у меня возникли проблемы с тем, как сгруппировать несколько транзакций в одно электронное письмо. Одно из полей столбца - «Адрес электронной почты», и в идеале я мог бы использовать его для группировки нескольких строк. По сути, слияние почты, которое можно сгруппировать по столбцу в электронной таблице или путем идентификации похожих значений.

Кроме того, отправленный столбец также не обновляется. Также, если отправленный столбец обновлен как отправленный, письмо и соответствующая строка не должна отправляться на адрес электронной почты.

Щелкните здесь, чтобы открыть электронную таблицу

Это то, что я ' у нас есть:

    var SENT = ""; // To mark in Colums as sent

    function sendEmails() {

      //This section specifies the sheet and some definitions we are working with

      var sheet =SpreadsheetApp.getActiveSpreadsheet().getSheetByName('MR');
      var lastrow = sheet.getLastRow();
      var startrow = 2;  // First row of data to process
      var numrows = lastrow;   // Number of rows to process
      sheet.sort("D1:D", true);   //Sorts the sheet by email address

      //This section formats the columns so they appear correctly in the html email below

      var column = sheet.getRange("A:A");
      column.setNumberFormat("MM/dd/yyyy"); // Simple date format 

       var column = sheet.getRange("C:C");
      column.setNumberFormat("0.00"); // Simple currency format   

      //This section specifies the actual data we will be working with

      var datarange = sheet.getRange(startrow, 1, lastrow, 5)// Fetch the range of cells
      var data = datarange.getValues();// Fetch values for each row in the Range.

       Logger.log(data)
       
    //Defining column data

      for (var i = 0; i < data.length; ++i) {
        var col = data[i];
        var expamount = col[2];   // Column starting at 0 from left to right
        var trandate = col[0];   // Column starting at 0 from left to right
        var reportname = col[1];   // Column starting at 0 from left to right
        var emailaddress = col[3];  // Column starting at 0 from left to right
        var emailsent = col[4];   //Column starting at 0 from left to right
        var subject = "Money receipt Not Sent" + reportname;   // Subject for the email to be sent
        var emailintro ='Hi'+ '<br /><br />'
        
        var emailtrans = ''

        var emailtrans = //THIS IS WHERE I WOULD LIKE THE MAGIC TO HAPPEN... I THINK

              '<strong>Vendor Name: </strong>' + reportname + '  <br /><strong>Transaction Date: </strong>' + trandate + 
              '  <br /><strong>Transaction Amount: </strong>' + expamount + '<br /><br />'
              
        var emailend =   // The endd of the email

              'We have not received the money receipt yet.' +
              'Also, please contact us if you believe you are recieving this email in error. Thank you. <br /><br /><br />' +

              'Enjoy your day, <br /><br />'

        //The section below retrieves alias email address to send as

        var me = Session.getActiveUser().getEmail();// Log the aliases for this Gmail account and send an email as the first one.
        var aliases = GmailApp.getAliases(); // Gets the alias ministrycard@cru.org from account
          Logger.log(aliases);  // Logs the alias

        // The section below sends the actual emails
        var nextEmail = '';
        if (i < data.length - 1) {
        nextEmail = data[i+1][2]//looks at next row, 13th column
      } else {//catch if i is the maximum row
        nextEmail = ''
    }

         if (emailaddress != "" && emailsent != SENT && nextEmail != emailaddress){
           if (aliases.length > 0){  // Prevents sending duplicates
          GmailApp.sendEmail(emailaddress, subject ,{htmlBody : emailintro + emailtrans + emailend});
            sheet.getRange(startrow + i,4).setValue(SENT);
            emailtrans = ''
              SpreadsheetApp.flush();  // Make sure the cell is updated right away in case the script is interrupted

           }} else {    }}} 
...