尝试让 google 工作表中的标题和日期自动与 Google 日历同步

Trying to have title and dates in google sheets automatically sync up with a Google calendar

我设法让一些东西工作,它会把标题和日期放在 Google 日历中,但我每次都必须 运行 脚本。但是当我改变一个事件的日期(日期总是在变化)时,它只会产生另一个事件并保留旧事件。

我只想有一个 google sheet 带有标题和日期的东西发生同步到 google 日历,当日期改变时,它会修改一个事件而不制作新的。理想情况下,不必每次都 运行 脚本。

function myFunction() {
  var spreadsheet = SpreadsheetApp.getActiveSheet();
  var calendarId = "test calendar";
  var eventCal = CalendarApp.getCalendarById(calendarId);
  var schedule = spreadsheet.getRange("A4:B6").getValues();

  for (x=0; x<schedule.length; x++) {
    var shifts = schedule[x];
    var Eventnames = shifts[0];
    var DateofEvent = shifts[1];

    eventCal.createAllDayEvent(Eventnames, DateofEvent);
  }
}

这是完成此操作的步骤

  1. 为 Calendar_Event_ID 创建一列(本例中为 C 列)
  2. 运行 此代码用于为您的所有活动创建日历活动(与您的代码相同,但经过修改以在 Calendar_Event_ID 列中保存日历活动 ID)。您最终将得到如下数据结构:
A B C
EventName1 EventDate1 EventId1
EventName2 EventDate2 EventId2
function myFunction() {
  var calendarEventIdColumn = 3 // put the number of your column choice here (C = 3)
  var dataStartRow = 4 // you started at A4 in your example, so I am starting with row 4
  var calendarEventIds = []; // this will store a list of calendar event IDs
  var spreadsheet = SpreadsheetApp.getActiveSheet();
  var calendarId = "test calendar";
  var eventCal = CalendarApp.getCalendarById(calendarId);
  var schedule = spreadsheet.getRange("A4:C6").getValues(); // added column C to include the calendar event ids

  for (var x=0; x < schedule.length; x++) {
    var shifts = schedule[x];
    var Eventnames = shifts[0];
    var DateofEvent = shifts[1];
    var eventId = shifts[2];
    var event;
    // if the event already exists, edit it. Otherwise create a new one.
    if (eventId !== '') {
      event = eventCal.getEventById(eventId);
      event.setTitle(Eventnames);
      event.setAllDayDate(DateofEvent);
    } else {
      event = eventCal.createAllDayEvent(Eventnames, DateofEvent);  
    }
    calendarEventIds.push([event.getId()]); // add the event id to list of event ids 
  }
  // save the new calendar event IDs under the calendarEventIdColumn
  spreadsheet.getRange(dataStartRow, calendarEventIdColumn, calendarEventIds.length, 1).setValues(calendarEventIds);
}
  1. 重新运行 myFunction 每次您编辑活动的日期或名称。请注意,您可以通过 运行 在应用程序脚本代码编辑器中创建一个 custom menu item, or with an edit trigger.
  2. 函数来执行此操作 'manually'