You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编写脚本从含任务截止日期的Sheet创建Google Calendar事件并设置提前提醒

如何用Google Apps Script从Sheet创建带提前提醒的日历事件

嘿,这个需求我之前帮不少人实现过,其实用Google Apps Script就能轻松搞定,全程不用跳出Google生态。我给你拆解成一步步的操作,跟着来就行:

第一步:先整理好你的Sheet结构

假设你的Sheet是两列布局:

  • A列:任务名称(比如「完成项目周报」)
  • B列:截止日期(得是Google Sheets能识别的格式,比如2024-10-08,先把B列单元格格式设为「日期」类型,避免脚本识别出错)

小提示:如果你的第一行是表头(比如A1写「任务」,B1写「截止日期」),脚本会自动跳过表头行,不用额外处理。

第二步:打开Google Apps Script编辑器

打开你的Sheet,点击顶部菜单的「扩展程序」→「Apps Script」,会弹出一个新的脚本编辑页面,默认的Code.gs文件就是我们写代码的地方。

第三步:编写核心脚本

把下面的代码替换掉默认的内容,我会给你标注关键可修改的地方:

function createCalendarEventsWithReminders() {
  // 获取当前Sheet的数据
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  const data = sheet.getDataRange().getValues();
  // 跳过表头行(如果没有表头,就把.slice(1)删掉)
  const tasks = data.slice(1);

  // 👇 这里设置提前提醒的天数,改成你需要的数字就行
  const reminderDaysBefore = 3;

  // 获取你的主日历,要指定其他日历的话,换成getCalendarById("你的日历ID")
  const calendar = CalendarApp.getDefaultCalendar();

  // 遍历每一行任务数据
  tasks.forEach((task, index) => {
    const taskName = task[0]; // A列的任务名称
    const deadline = task[1]; // B列的截止日期

    // 跳过空行或者无效日期
    if (!taskName || !(deadline instanceof Date)) return;

    // 计算提醒时间:截止日期往前推设置的天数
    const reminderTime = new Date(deadline);
    reminderTime.setDate(reminderTime.getDate() - reminderDaysBefore);

    try {
      // 创建日历事件
      const event = calendar.createEvent(
        taskName,
        deadline, // 事件开始时间(设为截止日当天,变成全天事件)
        deadline, // 事件结束时间(和开始时间一致)
        {
          description: `任务截止日期:${deadline.toLocaleDateString()}`,
          reminders: {
            overrides: [
              // 提前X天发邮件提醒,分钟数=天数×24×60
              {method: 'email', minutes: reminderDaysBefore * 24 * 60},
              // 提前X天在日历里弹出提醒,不需要可以删掉这一行
              {method: 'popup', minutes: reminderDaysBefore * 24 * 60}
            ]
          }
        }
      );

      // 可选:在C列标记事件状态,避免重复创建
      sheet.getRange(index + 2, 3).setValue(`已创建:${event.getId()}`);
      console.log(`成功创建事件:${taskName}`);
    } catch (error) {
      console.error(`创建事件失败 ${taskName}:`, error);
      sheet.getRange(index + 2, 3).setValue(`创建失败:${error.message}`);
    }
  });
}

关键参数说明

  • reminderDaysBefore:直接改数字就能调整提前提醒的天数,比如改成7就是提前一周提醒
  • 事件时间:如果你的截止日期有具体时间(比如当天17:00),可以把deadline改成new Date(deadline.setHours(17,0,0)),这样事件就会是指定时间的非全天事件
  • 提醒方式:reminders.overrides里的email和popup可以二选一,或者都保留,根据你的习惯来
  • 日历选择:如果不用主日历,去目标日历的「设置和共享」里找到「日历ID」,替换掉getDefaultCalendar()的部分就行

第四步:测试脚本

先在Sheet里填1-2行测试数据(比如A2写「测试任务」,B2填明天的日期),然后回到脚本编辑器点击「运行」按钮。第一次运行会触发授权,Google会提示“此应用未经验证”,别慌,点击「高级」→「继续访问」(因为这是你自己写的脚本,安全得很)。

运行完后,打开你的Google Calendar看看有没有对应的事件,同时检查Sheet的C列有没有标记状态,没问题的话就可以批量处理数据了。

第五步:设置定时自动运行(可选)

如果你希望脚本定期检查Sheet里的新任务并自动创建事件,可以设置触发器:

  • 点击脚本编辑器左侧的「触发器」图标(闹钟样的)
  • 点击「添加触发器」,配置如下:
    • 选择运行的函数:createCalendarEventsWithReminders
    • 事件来源:「时间驱动」
    • 时间类型:比如「每天」「每周」,根据你的更新频率选
    • 设置具体运行时间,比如每天早上9点
  • 保存后,脚本就会自动定期执行,不用手动跑啦

一些小提醒

  • 确保Sheet的日期格式正确,无效日期会被脚本跳过
  • 已经标记为「已创建」的行,再次运行脚本时不会重复创建事件,放心跑
  • 如果调整了Sheet的列顺序,记得修改代码里task[0]和task[1]对应的列索引(比如任务改到B列就改成task[1])

内容的提问来源于stack exchange,提问作者user12742603

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 10:12:35