Google Apps Script同步考勤记录至谷歌日历时,无法创建同日多个全天事件的问题求助
Google Apps Script同步考勤记录至谷歌日历时,无法创建同日多个全天事件的问题求助
大家好,我参考别人的思路写了一段Google Apps Script,用来把谷歌表格里的员工考勤记录同步到谷歌日历。目前脚本已经能实现新增事件,或者在员工考勤状态更新时修改已有事件的描述,但遇到了一个核心问题,想请各位帮忙指点方向。
先给大家看看我的脚本代码:
function updateCal(){ var cal = CalendarApp.getCalendarById("CalendarID"); var data = SpreadsheetApp.getActive().getSheetByName("Sheet1"); const rows = data.getDataRange().getValues(); rows.forEach(function(row, index){ if (index === 0) return; var eventdate = data.getRange(index, 4, 1, 1).getValue(); var eventtitle = data.getRange(index,1,1,1).getValue(); var eventdescription = data.getRange(index,2,1,1).getValue(); console.log(eventdate + eventtitle + eventdescription) const eventdate1 = new Date(eventdate) const events = cal.getEventsForDay(eventdate1); if (events.length == 0){ //我怀疑问题出在这一行 cal.createAllDayEvent(eventtitle,eventdate1,{description: eventdescription}); } else { ev = events[0]; ev.setDescription(eventdescription) } }) }
问题详情
现在的脚本逻辑是:如果某一天日历里没有事件,就创建新的全天事件;如果已经有事件,就修改第一个事件的描述。这就导致了一个严重的问题——同一天只能存在一个考勤事件。比如我手动删掉表格里原有的某条记录,再新增另一个员工当天的考勤记录,日历里只会把原有事件的描述改掉,标题还是原来那个员工的名字,完全没法新增一个新的员工考勤事件。
我的业务流程
- 脚本通过时间触发器自动运行
- 经理提交表单记录员工的缺勤、迟到或早退状态:员工姓名作为日历事件标题,考勤状态作为事件描述
- 谷歌表格会自动过滤数据,只保留每个员工每天的最后一条记录(这样如果员工的考勤状态有更新,只会同步最新的状态)
需求
我需要脚本既能实现「更新同一员工的当日考勤状态」,又能「在同一天为多个不同员工分别创建独立的考勤事件」,但现在不知道该怎么修改判断逻辑,尤其是if (events.length == 0)这部分,希望有人能给我指个方向。
备注:内容来源于stack exchange,提问作者Codedabbler
相关产品推荐
相关产品推荐

