Google Apps Script语法错误求助:需设置日历事件触发同步至谷歌表格
语法错误修复与需求实现方案
先解决你遇到的SyntaxError错误,代码中的问题点:
- 第13行的
SpreadsheetApp.属于无效代码块,直接删除即可,它没有调用任何方法,还导致语法断裂。 for循环末尾的分号;必须删除,分号会让循环语句提前终止,后面的代码块不会被识别为循环体,同时触发语法错误。events.lenght拼写错误,修正为events.length(是length不是lenght)。- 循环内的
event[x]变量名错误,应该是events[x],和你定义的数组变量名一致。 let title = event[x].getTitle(),末尾的逗号改为分号,变量声明结束需要用分号收尾。
针对你的需求(日历新增/更新事件时同步嘉宾邮箱到谷歌表格),完整修正后的代码:
// 初始化触发器的函数,执行一次即可 function myFunction() { const calID = '*你的日历ID*'; // 替换成你的谷歌日历ID const cal = CalendarApp.getCalendarById(calID); // 创建事件更新触发器,绑定findNewEvents函数 ScriptApp .newTrigger('findNewEvents') .forUserCalendar(cal) .onEventUpdated() .create(); // 以下是原代码中遍历现有事件的测试逻辑,可选保留 const startTime = new Date('2024-04-01 00:00 AM'); const endTime = new Date('2024-04-30 11:59 PM'); const events = cal.getEvents(startTime, endTime); for (let x = 0; x < events.length; x++) { let title = events[x].getTitle(); console.log(title); } } // 触发器触发时执行的函数,处理事件同步逻辑 function findNewEvents(e) { // 获取触发的事件对象 const event = e.calendarEvent; // 获取事件的所有参会者 const guests = event.getGuestList(); // 提取参会者邮箱,过滤空值 const guestEmails = guests.map(guest => guest.getEmail()).filter(email => email); // 替换成你的谷歌表格ID const spreadsheetID = '*你的表格ID*'; const sheet = SpreadsheetApp.openById(spreadsheetID).getActiveSheet(); // 准备要写入表格的数据:事件标题、参会者邮箱、开始时间、结束时间 const rowData = [ event.getTitle(), guestEmails.join(', '), event.getStartTime().toLocaleString(), event.getEndTime().toLocaleString() ]; // 将数据追加到表格末尾 sheet.appendRow(rowData); }
注意事项:
- 替换代码中的
*你的日历ID*和*你的表格ID*为你自己的实际ID。 - 执行
myFunction一次即可创建触发器,之后不需要重复执行。 - 触发器会在日历事件新增或更新时自动触发
findNewEvents函数,同步嘉宾信息到表格。 - 首次运行时需要授权脚本访问日历和表格权限。
内容的提问来源于stack exchange,提问作者Dons Mine urbaine
相关产品推荐
相关产品推荐

