基于电子表格中的日期,对多个工作表定时发送邮件通知(指定邮箱)

前端开发 2026-07-09

我给公司项目经理准备了一个任务管理表格。每个人都有自己的标签页,用来添加他们的项目、到期日等信息。当某个任务距离到期日还有一定天数时,就会发送邮箱通知。最初在设置表格时,用只有一个标签页并设好时间触发器的方案就能成功发送通知。

但在我添加了新标签页后,时间触发器虽运行成功,但通知不再发送。每天早上,我都会在每个标签页下运行代码,通知就能正确发送。我相当确定问题出在这段代码:

var sheet = SpreadsheetApp.getActiveSpreadsheet(). getActiveSheet();

但每次我把它改动来修复问题,整段代码就会失效,通知也就发送不出去了。

除了时间触发器不起作用外,我的脚本没有其它错误或问题。

想把一切都自动化,这样就不用每天早晨手动运行代码了。

我对编程经验不多。如果你能解释问题出在哪里,以及为什么做出这些改动就能修复它。我也希望能把这份表格在其他场景中复用。

这是我目前手动运行时效果很好的代码开头部分。

function sendReminders() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet(). getActiveSheet();
  var data = sheet.getDataRange() .getValues ();
  var today = new Date();
  today.setHours(0, 0, 0, 0);
  for (var i = 1; i < data.length; i++) {
    var task = data[i][1];
    var dueDate = new Date(data[i][4]);
    var email1 = data[i][10];
    var email2 = data[i][11];
    dueDate.setHours(0, 0, 0, 0);
    var diffInDays = Math.floor((dueDate - today) / (1000 * 60 * 60 * 24));
    if (diffInDays === 28) {
      if (email1) {
        MailApp.sendEmail(email1, "Upcoming Task Reminder: " + task,
          "Hi! The internal due date of '" + task + "' is in one (1) month (" + dueDate.toDateString() + ").");
        if (email2) {
          MailApp.sendEmail(email2, "Upcoming Task Reminder: " + task,
            "Hi! The internal due date of '" + task + "' is in one (1) month (" + dueDate.toDateString() + ").");
        }
      }
    // ...

解决方案

当一个函数通过一个 time-driven trigger 运行时,没有用户界面会话可供函数引用,因此也没有真正意义上的“活动工作表”。在这种情境下,Spreadsheet.getActiveSheet() 方法总是返回第一个工作表,也就是标签栏中最左边的那个。

如果要处理多个工作表,可以把它们列在一个 数组 中,并用 forEach 来遍历该数组。如果存在同名的工作表,就按你现有的代码发送邮件,像这样:

function sendReminders() {
  const ss = SpreadsheetApp.getActive();
  ['Shannon', 'Jane', 'Dweezil',].forEach(sheetName => {
    const sheet = ss.getSheetByName(sheetName);
    if (sheet) {
      sendReminders_(sheet)
    } else {
      console.log(`Cannot find sheet '${sheetName}'`);
    }
  })
}

function sendReminders_(sheet) {
  const data = sheet.getDataRange().getValues();
  // ...

参见 Stack Overflow上的Apps Script信息Clean Code JavaScript

站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章