Google apps script Google脚本:如何创建/更新/删除日历事件并防止重复
数据:Google apps script Google脚本:如何创建/更新/删除日历事件并防止重复,google-apps-script,google-spreadsheet-api,Google Apps Script,Google Spreadsheet Api,数据: 第1行-有一些公式和格式 第2行-具有列名 A3=XXXXXX(主题) B3=呼叫客户(说明) C3=00:15:00(活动持续时间) F3=5/12/20013 18:41:00(开始日期) I3=5/12/2013 18:56:00(结束日期)(结束日期=F3+C3的总和) J3=事件ID(阅读其他主题时,为避免重复,需要使用ID标识每个事件。) H3=“是”(创建或更新事件)“删除”(删除事件) 上升或下降取决于一天,例如一天有20个,其他3个 所有活动都将从电子表格中创建和更
第1行-有一些公式和格式
第2行-具有列名
- A3=XXXXXX(主题)
- B3=呼叫客户(说明)
- C3=00:15:00(活动持续时间)
- F3=5/12/20013 18:41:00(开始日期)
- I3=5/12/2013 18:56:00(结束日期)(结束日期=F3+C3的总和)
- J3=事件ID(阅读其他主题时,为避免重复,需要使用ID标识每个事件。)
- H3=“是”(创建或更新事件)“删除”(删除事件)
- 我们希望为每行>3创建一个日历事件
- 我们要防止重复
- 如果H列中的内容为“是”,则应使用该行的新日期创建或更新事件脚本。如果说“Delete”,则只应删除与该行关联的EventID李>
- 我们尝试使用此答案中上载的脚本,但该函数仅适用于前两行
- 当我们添加新主题并运行脚本时,脚本不会更新日历
- 此外,如果第一个事件自动更新为最后一行的信息,我们也不会这样做
- 此脚本在每次事件发生时删除并重新创建。如果存在,我想更新现有事件,或者创建不存在的事件
- 此脚本针对工作表中的每一行运行。我只想为修改后的行运行
- 没有检查H列
/** * Adds a custom menu to the active spreadsheet, containing a single menu item * for invoking the exportEvents() function. * The onOpen() function, when defined, is automatically invoked whenever the * spreadsheet is opened. * For more information on using the Spreadsheet API, see * https://developers.google.com/apps-script/service_spreadsheet */ function onOpen() { var sheet = SpreadsheetApp.getActiveSpreadsheet(); var entries = [{ name : "Export Events", functionName : "exportEvents" }]; sheet.addMenu("Calendar Actions", entries); }; /** * Export events from spreadsheet to calendar */ function exportEvents() { var sheet = SpreadsheetApp.getActiveSheet(); if (sheet.getName() == "Sheet1"){ var activeCell = sheet.getActiveCell(); //Detec the ActiveCell var row = activeCell.getRow(); //Detect the ActiveRow var headerRows = 2; // Number of rows of header info (to skip) var range = sheet.getDataRange(); var data = range.getValues(); var calId = "8au195cppi3smt6m138cgjpr3o@group.calendar.google.com"; var cal = CalendarApp.getCalendarById(calId); for (i in data) { if (i < headerRows) continue; // Skip header row(s) var row = data[i]; var title = row[0]; // [0] First column// [1] Second column var tstart = row [5]; var tstop = row [8]; var desc = row[1]; var id = row[9]; // Nine column == eventId // Check if event already exists, delete it if it does try { var event = cal.getEventSeriesById(id); event.deleteEventSeries(); row[9] = ''; // Remove event ID } catch (e) { // do nothing - we just want to avoid the exception when event doesn't exist } //cal.createEvent(title, new Date("March 3, 2010 08:00:00"), new Date("March 3, 2010 09:00:00"), {description:desc,location:loc}); var newEvent = cal.createEvent(title, tstart, tstop, {description:desc}).getId(); row[9] = newEvent; // Update the data array with event ID debugger; } // Record all event IDs to spreadsheet range.setValues(data); } }
/** *将自定义菜单添加到活动电子表格,其中包含单个菜单项 *用于调用exportEvents()函数。 *定义onOpen()函数后,每当 *电子表格已打开。 *有关使用电子表格API的更多信息,请参见 * https://developers.google.com/apps-script/service_spreadsheet */ 函数onOpen(){ var sheet=SpreadsheetApp.getActiveSpreadsheet(); 变量项=[{ 名称:“导出事件”, 函数名:“exportEvents” }]; sheet.addMenu(“日历操作”,条目); }; /** *将事件从电子表格导出到日历 */ 函数exportEvents(){ var sheet=SpreadsheetApp.getActiveSheet(); 如果(sheet.getName()=“Sheet1”){ var activeCell=sheet.getActiveCell();//检测activeCell var row=activeCell.getRow();//检测ActiveRow var headerRows=2;//标题信息的行数(要跳过) var range=sheet.getDataRange(); var data=range.getValues(); var calId=”8au195cppi3smt6m138cgjpr3o@group.calendar.google.com"; var cal=CalendarApp.getCalendarById(calId); 对于(数据中的i){ 如果(i
data = range.getValues();
到
据我所知,getDisplayValues将检索单元格的字符串值
data = range.getDisplayValues();