我正在寻找一个功能,可以立即通过谷歌脚本将新的日历事件添加到我的谷歌工作表中。我不想导入完整的日历或特定时间发生的所有事件。对于我的应用程序,我只需要最后创建的事件。 有没有更快的方法,而不是仅测试所有事件并仅添加尚未在工作表中的事件? 我需要某种方法,通过谷歌脚本获取最后编辑的事件。 感谢您的帮助!
我查看了应用程序脚本网站,但在那里找不到函数或触发器。
function tester() {//for testing without timebased trigger
let dt = new Date();
let evobj = { year: dt.getFullYear(), month: dt.getMonth() + 1, "day-of-month": dt.getDate() }
addNewCalEvents(evobj);
}
function addNewCalEvents(e) {
const ss = SpreadsheetApp.getActive();
const sh = ss.getSheetByName("Sheet0");
let evtids = [];
if (sh.getLastRow() == 0) {
sh.getRange(1, 1, 1, 5).setValues([["CalId", "EventId", "Title", "Start", "End"]]);
SpreadsheetApp.flush();
}
if (sh.getLastRow() > 1) {
evtids = sh.getRange(2, 2, sh.getLastRow() - 1).getValues().flat();
}
const calids = []
const stdt = new Date(e.year, e.month - 1, e["day-of-month"]);
const endt = new Date(e.year, e.month + 2, e["day-of-month"]);
let evts = [];
calids.forEach(id => {
CalendarApp.getCalendarById(id).getEvents(stdt, endt).forEach(ev => {
if (!~evtids.indexOf(ev.getId())) {
evts.push([id, ev.getId(), ev.getTitle(), ev.getStartTime(), ev.getEndTime()]);
}
});
})
if (evts.length > 0) {
sh.getRange(sh.getLastRow() + 1, 1, evts.length, evts[0].length).setValues(evts);
}
}
function createTimeBaseTrigger(handler) {//timebased trigger
if (ScriptApp.getProjectTriggers().filter(t => t.getHandlerFunction() == handler).filter(e => e).length == 0) {
ScriptApp.newTrigger("addNewCalEvents").timeBased().everyDays(1).athour(1).create();
}
}