尝试让 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);
}
}
这是完成此操作的步骤
- 为 Calendar_Event_ID 创建一列(本例中为 C 列)
- 运行 此代码用于为您的所有活动创建日历活动(与您的代码相同,但经过修改以在 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);
}
- 重新运行
myFunction
每次您编辑活动的日期或名称。请注意,您可以通过 运行 在应用程序脚本代码编辑器中创建一个 custom menu item, or with an edit trigger. 函数来执行此操作 'manually'
我设法让一些东西工作,它会把标题和日期放在 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);
}
}
这是完成此操作的步骤
- 为 Calendar_Event_ID 创建一列(本例中为 C 列)
- 运行 此代码用于为您的所有活动创建日历活动(与您的代码相同,但经过修改以在 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);
}
- 重新运行
myFunction
每次您编辑活动的日期或名称。请注意,您可以通过 运行 在应用程序脚本代码编辑器中创建一个 custom menu item, or with an edit trigger. 函数来执行此操作 'manually'