javascript - 试图让谷歌表格中的标题和日期自动与谷歌日历同步
问题描述
我设法得到一些工作,它将获取标题和日期并将其放入 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 列)
- 运行此代码为您的所有事件创建日历事件(与您的代码相同,修改后将日历事件 ID 保存在 Calendar_Event_ID 列中)。您最终将得到如下数据结构:
一个 | 乙 | C |
---|---|---|
事件名称1 | 事件日期1 | 事件 ID1 |
事件名称2 | 事件日期2 | 事件 ID2 |
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);
}
推荐阅读
- android - Xamarin.Forms 列表视图未在 Android 中更新
- python - 双击批处理文件并在 cronjob 中执行的不同行为
- sql - 如何根据出现多次的月份获取日期?
- r - 如何将函数应用于四分位数子集?
- jenkins - 脚本化和声明性管道之间的 Jenkins 错误处理
- ios - 为什么定时器/倒计时总是用 UITableViewCell 中的初始值重置
- amazon-web-services - 如何动态更改 cognito 忘记密码流程的“fromEmailAddress”?
- javascript - 如何根据服务器调用触发特定的 Angularjs UIClient 应用程序?
- arrays - 从 UIImage 数组中获取值并转换为字符串
- svg - 带有彩色背景的 svg 或标记的透明图标