请帮忙排查: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(); }
额外注意事项
- 首次运行脚本时会弹出权限申请,需授权允许脚本访问你的Google Calendar。
- 确认表格中的日期是Google Sheets可识别的标准日期格式,避免生成无效的
Date对象。
内容的提问来源于stack exchange,提问作者Lucas
相关产品推荐
相关产品推荐

