无法使用此脚本在日历上创建事件
Not able to create event on Calendar with this script
我在 Google Sheet 单元格 U69、U70、X69 中分别有事件标题、开始日期和结束日期。
它说在脚本中执行成功但没有添加事件。
function calendar() {
var spreadsheet = SpreadsheetApp.getActiveSheet();
var eventCal = CalendarApp.getCalendarById("c_v6h2ud0dru0dqojch3103sue20@group.calendar.google.com");
var name = spreadsheet.getRange('U69').getValue();
var start = new Date(spreadsheet.getRange('U70').getValue());
var end = new Date(spreadsheet.getRange('X69').getValue());
eventCal.createEvent(name,start,end);
Logger.log('Reminder is added to your calendar');
}
编辑 2:
PS - 我在 sheet 上做这件事,我是它的所有者。我也在创建脚本。我是 运行,我在日历上看不到条目。
5 人可以访问 sheet。我已从日历设置部分授予对所有 5 个“进行更改和管理共享”的访问权限。
请帮忙。我究竟做错了什么?语法错误在哪里?我是否正确地为变量加上了引号?还是其他原因?
编辑 3:
我添加了 logger.log(日历)。它说在脚本中执行成功(根据附图),但没有添加事件。
function calendar() {
var spreadsheet = SpreadsheetApp.getActiveSheet();
var calendarId = spreadsheet.getRange("AA69").getValue();
var eventCal = CalendarApp.getCalendarById("c_v6h2ud0dru0dqojch3103sue20@group.calendar.google.com");
var name = spreadsheet.getRange('U69').getValue();
var start = new Date(spreadsheet.getRange('U70').getValue());
var end = new Date(spreadsheet.getRange('X69').getValue());
eventCal.createEvent(name,start,end);
Logger.log(calendarId);
}
[![在此处输入图片描述][1]][1]
编辑 4:
我检查了 ISDATE() 公式。 U70 和 X69 都是 True。该代码还显示执行完成。 Logger.Log 也给出了正确的单元格值。
语法nw应该怎么办?活动仍未添加。
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Course');
var eventCal = CalendarApp.getCalendarById('c_v6h2ud0dru0dqojch3103sue20@group.calendar.google.com');
var name = spreadsheet.getRange('U69').getValue();
var start = spreadsheet.getRange('U70').getDisplayValue();
var end = spreadsheet.getRange('X69').getDisplayValue();
eventCal.createEvent(name,new Date(start),new Date(end));
Logger.log(end);
}
编辑 5:
迈克的回答对我有帮助。非常感谢,迈克
你有 eventCal.createEvent...... TypeError: Cannot read property 'createEvent' of null
的原因是 CalendarApp.getCalendarById(calendar id)
returns null 如果日历不存在,如果用户不能访问它,或者如果用户没有订阅日历。
要解决此问题,请确保您具有对日历的编辑权限并重新运行您的代码。如果您有权访问日历,它应该 return 一个 Calendar Class 并且在那个 Calendar class 里面是 createEvent()
方法。
更新 #1:
鉴于 OP 也是日历的所有者,一个可能的原因是 var calendarId
的值不是日历的有效 ID。您可以尝试通过在其下方添加 Logger.log(calendarId)
来调试它,以检查您是否能够在单元格 AA69.
中获取日历 ID 的值
在 how to get the calendar ID 上关注此 link。
更新#2:
对于日期问题,您可以选择以下选项:
- 删除
start
和 end
变量中的 new Date()
。
或
- 使用
getDisplayValue()
而不是 getValue()
。
参考文献:
这里的代码在 getCalendarsByName、getCalendarById、getDefaultCalendar 的 3 种方式中都能正常工作
function testCalendar() {
var sh = SpreadsheetApp.getActiveSheet()
var start = new Date(sh.getRange('A1').getValue()).getTime()
var end = new Date(sh.getRange('A2').getValue()).getTime()
var calendName = CalendarApp.getCalendarsByName('alertes');
var calendById = CalendarApp.getCalendarById('a2j9469bvfr93ob9bbottd0v80@group.calendar.google.com')
var calend = CalendarApp.getDefaultCalendar()
calendName[0].createEvent('test script createEvent', new Date(start), new Date(end)).addSmsReminder(0);
calendById.createEvent('test script createEvent', new Date(start), new Date(end)).addSmsReminder(0);
calend.createEvent('test script createEvent', new Date(start), new Date(end)).addSmsReminder(0);
}
所以,我建议你试试
function calendar() {
var spreadsheet = SpreadsheetApp.getActiveSheet();
var eventCal = CalendarApp.getCalendarById("c_v6h2ud0dru0dqojch3103sue20@group.calendar.google.com");
var name = spreadsheet.getRange('U69').getValue();
var start = new Date(spreadsheet.getRange('U70').getValue()).getTime();
var end = new Date(spreadsheet.getRange('X69').getValue()).getTime();
eventCal.createEvent(name,new Date(start),new Date(end));
Logger.log('Reminder is added to your calendar');
}
我在 Google Sheet 单元格 U69、U70、X69 中分别有事件标题、开始日期和结束日期。
它说在脚本中执行成功但没有添加事件。
function calendar() {
var spreadsheet = SpreadsheetApp.getActiveSheet();
var eventCal = CalendarApp.getCalendarById("c_v6h2ud0dru0dqojch3103sue20@group.calendar.google.com");
var name = spreadsheet.getRange('U69').getValue();
var start = new Date(spreadsheet.getRange('U70').getValue());
var end = new Date(spreadsheet.getRange('X69').getValue());
eventCal.createEvent(name,start,end);
Logger.log('Reminder is added to your calendar');
}
编辑 2:
PS - 我在 sheet 上做这件事,我是它的所有者。我也在创建脚本。我是 运行,我在日历上看不到条目。
5 人可以访问 sheet。我已从日历设置部分授予对所有 5 个“进行更改和管理共享”的访问权限。
请帮忙。我究竟做错了什么?语法错误在哪里?我是否正确地为变量加上了引号?还是其他原因?
编辑 3: 我添加了 logger.log(日历)。它说在脚本中执行成功(根据附图),但没有添加事件。
function calendar() {
var spreadsheet = SpreadsheetApp.getActiveSheet();
var calendarId = spreadsheet.getRange("AA69").getValue();
var eventCal = CalendarApp.getCalendarById("c_v6h2ud0dru0dqojch3103sue20@group.calendar.google.com");
var name = spreadsheet.getRange('U69').getValue();
var start = new Date(spreadsheet.getRange('U70').getValue());
var end = new Date(spreadsheet.getRange('X69').getValue());
eventCal.createEvent(name,start,end);
Logger.log(calendarId);
}
[![在此处输入图片描述][1]][1]
编辑 4: 我检查了 ISDATE() 公式。 U70 和 X69 都是 True。该代码还显示执行完成。 Logger.Log 也给出了正确的单元格值。
语法nw应该怎么办?活动仍未添加。
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Course');
var eventCal = CalendarApp.getCalendarById('c_v6h2ud0dru0dqojch3103sue20@group.calendar.google.com');
var name = spreadsheet.getRange('U69').getValue();
var start = spreadsheet.getRange('U70').getDisplayValue();
var end = spreadsheet.getRange('X69').getDisplayValue();
eventCal.createEvent(name,new Date(start),new Date(end));
Logger.log(end);
}
编辑 5: 迈克的回答对我有帮助。非常感谢,迈克
你有 eventCal.createEvent...... TypeError: Cannot read property 'createEvent' of null
的原因是 CalendarApp.getCalendarById(calendar id)
returns null 如果日历不存在,如果用户不能访问它,或者如果用户没有订阅日历。
要解决此问题,请确保您具有对日历的编辑权限并重新运行您的代码。如果您有权访问日历,它应该 return 一个 Calendar Class 并且在那个 Calendar class 里面是 createEvent()
方法。
更新 #1:
鉴于 OP 也是日历的所有者,一个可能的原因是 var calendarId
的值不是日历的有效 ID。您可以尝试通过在其下方添加 Logger.log(calendarId)
来调试它,以检查您是否能够在单元格 AA69.
在 how to get the calendar ID 上关注此 link。
更新#2:
对于日期问题,您可以选择以下选项:
- 删除
start
和end
变量中的new Date()
。
或
- 使用
getDisplayValue()
而不是getValue()
。
参考文献:
这里的代码在 getCalendarsByName、getCalendarById、getDefaultCalendar 的 3 种方式中都能正常工作
function testCalendar() {
var sh = SpreadsheetApp.getActiveSheet()
var start = new Date(sh.getRange('A1').getValue()).getTime()
var end = new Date(sh.getRange('A2').getValue()).getTime()
var calendName = CalendarApp.getCalendarsByName('alertes');
var calendById = CalendarApp.getCalendarById('a2j9469bvfr93ob9bbottd0v80@group.calendar.google.com')
var calend = CalendarApp.getDefaultCalendar()
calendName[0].createEvent('test script createEvent', new Date(start), new Date(end)).addSmsReminder(0);
calendById.createEvent('test script createEvent', new Date(start), new Date(end)).addSmsReminder(0);
calend.createEvent('test script createEvent', new Date(start), new Date(end)).addSmsReminder(0);
}
所以,我建议你试试
function calendar() {
var spreadsheet = SpreadsheetApp.getActiveSheet();
var eventCal = CalendarApp.getCalendarById("c_v6h2ud0dru0dqojch3103sue20@group.calendar.google.com");
var name = spreadsheet.getRange('U69').getValue();
var start = new Date(spreadsheet.getRange('U70').getValue()).getTime();
var end = new Date(spreadsheet.getRange('X69').getValue()).getTime();
eventCal.createEvent(name,new Date(start),new Date(end));
Logger.log('Reminder is added to your calendar');
}