То, что я ищу:
Я работаю над электронной таблицей, содержащей информацию для нескольких поставщиков. Некоторые поставщики имеют только одну транзакцию (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 { }}}