Google Apps Script创建日历事件后设置颜色及嘉宾通知问题
Google Apps Script 日历事件设置问题解答
问题背景
我没上过编程课,纯靠资料自学Google Apps Script,现在已经实现了「表单提交数据到表格→触发函数创建日历事件→删除表格对应行」的流程,但遇到两个问题:
- 按员工级别设置日历事件颜色时,报错
ReferenceError: setColor is not defined,不知道怎么引用刚创建的事件来调用setColor方法 - 不知道怎么给添加的嘉宾发送事件加入通知
解决代码与说明
先给你改好的完整代码,再逐个讲修改点:
function scheduleShifts() { var spreadsheet = SpreadsheetApp.getActiveSheet(); var calendarId = spreadsheet.getRange("K1").getValue(); var eventCal = CalendarApp.getCalendarById(calendarId); var count = spreadsheet.getRange("I1").getValue(); var signups = spreadsheet.getRange(2,2,count,7).getValues(); for (let x=0; x<signups.length; x++) { var shift = signups[x]; var startTime = shift[4]; var endTime = shift[5]; var volunteer = shift[3]; var EmpLvl = shift[6]; // 改成从当前行取员工级别,原来固定H2是错误的 // 将创建的日历事件存为变量event,后续用它调用专属方法 var event = eventCal.createEvent(volunteer, startTime, endTime, { description: "Please make sure your PTO is submitted", sendInvites: true // 开启嘉宾邀请通知 }) .addEmailReminder(1440) .addGuest(spreadsheet.getRange("B2").getValue()); // 给当前创建的事件设置对应颜色 if (EmpLvl == "Partner"){ event.setColor("11"); }else if (EmpLvl == "Principal"){ event.setColor("6"); }else if (EmpLvl == "Senior Manager"){ event.setColor("9"); }else if (EmpLvl == "Manager"){ event.setColor("1"); }else if (EmpLvl == "Senior"){ event.setColor("10"); }else if (EmpLvl == "Staff"){ event.setColor("2"); }else if (EmpLvl == "Intern"){ event.setColor("5"); }else if (EmpLvl == "Director"){ event.setColor("7"); }else if (EmpLvl == "Administration"){ event.setColor("3"); }else if (EmpLvl == "Outside Consultant"){ // 补上遗漏的else,避免逻辑错误 event.setColor("8"); } } spreadsheet.deleteRows(2,count); spreadsheet.getRange("I1").clearContent(); spreadsheet.getRange("I1").setFormula("=COUNT($A$1:$A$1103)"); }
问题1:颜色设置报错的解决
- 保存事件对象:原来的代码创建事件后直接链式调用方法,但没把事件存下来。现在把
eventCal.createEvent(...)的结果存在event变量里,event就是刚创建的日历事件对象,它自带setColor方法。 - 修正级别取值:原来固定取H2单元格的员工级别,循环里所有事件都会用同一个级别,现在改成从当前循环的行数据里取(这里假设员工级别在
signups数组的第7列,对应索引6,你可以根据自己表格的列调整)。 - 调用正确方法:把原来的
setColor("xx")改成event.setColor("xx"),这样就是给刚创建的这个事件设置颜色。
问题2:嘉宾通知的解决
在创建事件的高级选项里加上sendInvites: true,这样添加嘉宾时会自动发送邮件邀请。这个选项是createEvent方法第四个参数(那个配置对象里的属性),加上后不用额外写代码发通知。
内容的提问来源于stack exchange,提问作者Will
相关产品推荐
相关产品推荐

