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

请帮忙排查:Apps Script从Google Sheets同步日程到Google Calendar失败

问题排查与修复方案

你的脚本无法创建日历事件,核心问题有三个:

  • 未指定有效日历ID:calID是空字符串,CalendarApp.getCalendarById("")会返回null,无法执行后续创建事件的操作。需要填入目标Google日历的ID(可在日历设置中找到)。
  • 错误使用console.info赋值:console.info()仅用于日志输出,没有返回值,直接用它赋值会导致startDay、endDay等变量变为undefined,传递给new Date()后生成无效日期,导致创建事件失败。
  • 全天事件参数格式错误:createAllDayEvent如果需要设置结束日期,参数顺序应为标题、开始日期、结束日期、选项对象,你当前的写法遗漏了结束日期,且把选项对象放在了错误的位置。

修正后的代码

function goCreate() {
  // 替换为你的目标日历ID
  const calID = "你的日历ID";
  var eventCal = CalendarApp.getCalendarById(calID);
  // 校验日历是否存在
  if (!eventCal) {
    SpreadsheetApp.getUi().alert("无效的日历ID,请检查后重试");
    return;
  }
  
  var ss = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  // 先获取值,再单独打印日志
  var startDay = ss.getRange("D13").getValue();
  console.info("开始日期:", startDay);
  var endDay = ss.getRange("G13").getValue();
  console.info("结束日期:", endDay);
  var guests = ss.getRange("C8").getValue();
  console.info("参会人:", guests);
  var location = ss.getRange("D14").getValue();
  console.info("地点:", location);
  var description = ss.getRange("D16").getValue();
  console.info("描述:", description);
  
  var details = {
    'description': description,
    'location': location,
    'guests': guests // 直接在选项中添加参会人
  };
  
  // 正确调用全天事件方法:标题、开始日期、结束日期、选项
  eventCal.createAllDayEvent("Test", new Date(startDay), new Date(endDay), details);
  SpreadsheetApp.getUi().alert("事件创建成功");
}

function onOpen(){
  var ui = SpreadsheetApp.getUi();
  ui.createMenu("Sync to Cal").addItem('Create Events Now', 'goCreate').addToUi();
}

额外注意事项

  1. 首次运行脚本时会弹出权限申请,需授权允许脚本访问你的Google Calendar。
  2. 确认表格中的日期是Google Sheets可识别的标准日期格式,避免生成无效的Date对象。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 04:07:46