如何用Google App Script创建14天后的全天日历事件?报错求助
解决CalendarApp.createAllDayEvent参数不匹配的报错
报错原因
你遇到的Exception: The parameters (String,String) don't match the method signature问题,核心是第二个参数传入了字符串而非Date对象:
当执行new Date() + 14时,JavaScript会自动把Date对象转为字符串格式(比如"Wed Oct 18 2024 15:30:00 GMT+0800 (中国标准时间)"),再和数字14拼接,最终得到的是字符串类型,不符合createAllDayEvent要求的Date类型参数。
修复后的脚本
正确计算14天后的日期,要保持参数为Date类型,这里提供两种可靠的写法:
写法1:用时间戳计算
var SheetApp = SpreadsheetApp.getActiveSheet(); var SelectedRow = SheetApp.getActiveRange().getRowIndex(); var value = SheetApp.getRange(SelectedRow, 8).getValue(); // 事件名称 var eventCal = CalendarApp.getCalendarById("sampleemail@gmail.com"); // 计算14天后的时间戳,转为Date对象 var fourteenDaysLater = new Date(Date.now() + 14 * 24 * 60 * 60 * 1000); eventCal.createAllDayEvent(value.toString(), fourteenDaysLater);
写法2:用Date的setDate方法(更直观)
var SheetApp = SpreadsheetApp.getActiveSheet(); var SelectedRow = SheetApp.getActiveRange().getRowIndex(); var value = SheetApp.getRange(SelectedRow, 8).getValue(); // 事件名称 var eventCal = CalendarApp.getCalendarById("sampleemail@gmail.com"); var today = new Date(); var fourteenDaysLater = new Date(today); // 直接设置日期为今天+14天,自动处理跨月/跨年情况 fourteenDaysLater.setDate(today.getDate() + 14); eventCal.createAllDayEvent(value.toString(), fourteenDaysLater);
额外说明
- 第二种写法更推荐,因为
setDate会自动处理月份切换(比如今天是10月28日,加14天会自动转到11月11日),无需手动计算月份天数。 - 如果
value本身就是字符串类型(从单元格读取的是文本),value.toString()可以省略,直接传value即可。
内容的提问来源于stack exchange,提问作者Jay
相关产品推荐
相关产品推荐

