我指的是this question。
function renameEvents() {
var cal = CalendarApp.getCalendarById("Calendar Id");
var startTime = new Date(1850, 0, 1);
var endTime = new Date(2100, 0, 1);
var events = cal.getEvents(startTime, endTime);
var sp = PropertiesService.getScriptProperties();
if (!(sp.getProperty("count")) || sp.getProperty("count") == 0) {
var count = 0;
else if ((sp.getProperty("count") > 0) {
var count = sp.getProperty("count");
}
for (var i = count; i < events.length; i++) {
events[i].setTitle(events[i].getTitle() + " something");
events[i].setDescription(events[i].getDescription() + " something else");
sp.setProperty("count", i)
}
}
初始功能运行是时间触发的。如何以编程方式触发下一个函数运行以继续下一个块?
我相信您的目标如下。
您想减少以下脚本的处理成本。该脚本来自您所提问的the URL。
var cal = CalendarApp.getCalendarById("Calendar Id");
var startTime = new Date(1850, 0, 1);
var endTime = new Date(2100, 0, 1);
var events = cal.getEvents(startTime, endTime);
for (var i = 0; i < events.length; i++) {
events[i].setTitle(events[i].getTitle() + " something");
events[i].setDescription(events[i].getDescription() + " something else");
}
您要修改Google日历中所有事件的事件标题和事件描述。
为此,这个答案如何?
count
开始循环。我这样理解。setTitle
和setDescription
的成本很高。setTitle
和setDescription
之外,在for循环中还使用setProperty
。在这种情况下,过程成本会更高。我的回答是一种解决方法,我建议针对您的情况使用the batch request。 Calendar API可以通过批处理请求运行。批处理请求通过异步过程运行,并且可以通过一个API调用运行100个请求。由此,可以降低处理成本。因此,我认为当将批处理请求用于您的情况时,您的所有任务可能可以通过一个正在运行的脚本来完成。
为了使用此示例脚本,请安装BatchRequest的Google Apps脚本库。您可以在https://github.com/tanaikech/BatchRequest#how-to-install中看到安装库的方法。
请复制并粘贴以下脚本。和please enable Google Calendar API at Advanced Google services。并将您的日历ID设置为calendarId
。
function myFunction() {
const calendarId = "###";
var cal = CalendarApp.getCalendarById(calendarId);
var startTime = new Date(1850, 0, 1);
var endTime = new Date(2100, 0, 1);
var events = cal.getEvents(startTime, endTime);
// Create requests for the batch request.
const reqs = events.map(e => ({
method: "PUT",
endpoint: `https://www.googleapis.com/calendar/v3/calendars/${calendarId}/events/${e.getId().replace("@google.com", "")}`,
requestBody: {
start: {dateTime: e.getStartTime().toISOString()},
end: {dateTime: e.getEndTime().toISOString()},
summary: e.getTitle() + " something",
description: e.getDescription() + " something else"
}
}));
// Run batch requests.
const limit = 100;
const split = Math.ceil(reqs.length / limit);
for (let i = 0; i < split; i++) {
BatchRequest.Do({batchPath: "batch/calendar/v3", requests: reqs.splice(0, limit)});
}
}
myFunction
的功能时,所有事件的标题和描述都将通过Calendar API中的事件方法:更新的方法进行修改。