【发布时间】:2021-07-28 20:44:10
【问题描述】:
我有一个类似的数据
我想从 appscript 发送电子邮件。
发送邮件的逻辑如下。
仅向 A 列(共同名称)中的每个唯一值发送 1 封电子邮件,电子邮件的内容将包含所有行中的数据。仅发送 N 列值为“Y”的电子邮件。例如,
脚本只会发送 3 封电子邮件:
电子邮件 1: 提醒一下“HCMC 1”的以下房屋租赁合同已经到期。
- A 先生 - 房屋租约将于 2021 年 7 月 11 日到期
- B 先生 - 房屋租约将于 2021 年 7 月 11 日到期
电子邮件 2: 特此提醒,“HCMC 4”以下房屋租赁合同已到期。
- C 先生 - 房屋租约将于 2021 年 7 月 11 日到期
电子邮件 3: 特此提醒,以下“HCMC 5”房屋租赁合同已到期。
- D 先生 - 房屋租约将于 2021 年 7 月 11 日到期
我使用这个脚本。但是,它不能发送包含多行数据的电子邮件。它发送 4 封电子邮件而不是 3 封。请帮助我。谢谢。
function HLReminderAtYE(){
var SS = SpreadsheetApp.getActiveSpreadsheet(); //declare the spreadsheet
var Sheet = SS.getSheetByName("Tax_Master"); //declare sheet name
var Range = Sheet.getDataRange(); //to set the range as array
var Values = Range.getDisplayValues(); //to get the value in the array
let fvs = Values.filter(function (item) { return item[13] == "Y" }); // filter only housecontract to remind at year end
var templateText = SS.getSheetByName("Template").getRange(1,1).getValue();
fvs.forEach(function(row){
var AssigneeNames = row[1];
var ClientNames = row[0];
var HLEndDates = row[7];
var messageBody = templateText.replace("{ClientNames}",ClientNames).replace("{AssigneeNames}",AssigneeNames).replace("{HouseleaseEndDates}",HLEndDates);
MailApp.sendEmail(
row[12], // email address
row[0] + "- House lease contract expire", // Subject line
messageBody);
});
}
【问题讨论】:
-
@Cooper 你在吗? :)
-
您的循环遍历设置了提醒标志的每一行。您有 4 行,产生 4 封电子邮件。您应该首先在一个数组中收集所有唯一的“共同名称”,遍历该数组并找到当前“共同名称”的对应行并将其放入电子邮件中。
-
使用对象为您希望的每个受让人或客户创建属性,并收集每个键的行数组以及将所有属性列为数组的属性数组。完成集合后,您可以遍历您的属性数组,以向您之前选择的受让人或客户发送单个电子邮件。我使用 Object.hasOwnProperty() 方法来确定属性是否已经创建。这与创建数据透视表或反向数据透视表的想法相同。
-
非常感谢您的帮助。 Aerials 的答案是我的问题的解决方案。