谷歌应用程序根据电子表格中的值在自定义日期和时间编写基于时间的触发器脚本



我正在尝试创建一个谷歌应用程序脚本,该脚本能够根据电子表格中的值在特定时间安排邮件。将有多个日期-时间单元作为触发的基础。我曾尝试使用ScriptApp.newTrigger()以编程方式添加触发器,但我不知道创建触发器的函数应该何时运行。任何关于如何做到这一点的见解都将是非常棒的。

编辑:当用户像这样提交表单时创建了触发器。

function saveForm(form) {
const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Test');
const now = Utilities.formatDate(new Date(), "GMT+5:30", "yyyy-MM-dd");
const newRow = [now, form.cid, form.custName, form.custNumber, form.goodsType, form.tonnage, form.area, form.completeAddr, `${now} - ${form.time}`, form.comments];
sheet.appendRow(newRow); 
const customDate = new Date(`${now}T${form.time}`);
ScriptApp.newTrigger('dispatchMail').timeBased().at(customDate).create();

return 'Data saved successfully';
}

现在发送邮件的功能

function dispatchMail() {
const now = Utilities.formatDate(new Date(), "GMT+5:30", "yyyy-MM-dd");
const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Test');
const data = sheet.getDataRange().getValues();
const normalized = {
'Mark': [],
'Jack': [],
'Chloe': [],
'Robin': [],
'Unassigned': []
};
for(let i=1; i<data.length; i++) {
normalized[data[i][10]] = normalized[data[i][10]].concat([data[i]]);
}
//start our mail dispatch here once we have aggregated the data
}

但现在的问题是,用户不知道该将邮件发送给谁。例如,用户提交的表单中,邮件触发器计划在下午2点发送给Mark,Jack在下午4点发送给Jack。现在,在dispatch-mail函数中,如何确定将此邮件发送给Mark或Jack。我看不出有什么方法可以将params传递给触发器函数。有什么办法吗?

如果您的问题与确定触发器运行时应该执行的内容有关,您可能需要更改处理方法。

与其为每条消息创建一个触发器,为什么不对是否需要发送消息进行单个触发器检查呢。

您可以:

  • 创建一个函数:
    • 过滤掉已发送的消息
    • 查找过去具有target send time的邮件
    • 发送这些消息
  • 创建一个基于时间的触发器来运行该函数

请记住,在最佳情况下,您的消息将在目标时间发送,在最坏情况下,它将在<interval between trigger runs>时间发送。

此外,您还需要跟踪已经发送的内容(例如,使用额外的列或删除行(

相关内容

  • 没有找到相关文章

最新更新