自动添加新的日历事件到我的谷歌表格

问题描述 投票:0回答:1

我正在寻找一个功能,可以立即通过谷歌脚本将新的日历事件添加到我的谷歌工作表中。我不想导入完整的日历或特定时间发生的所有事件。对于我的应用程序,我只需要最后创建的事件。 有没有更快的方法,而不是仅测试所有事件并仅添加尚未在工作表中的事件? 我需要某种方法,通过谷歌脚本获取最后编辑的事件。 感谢您的帮助!

我查看了应用程序脚本网站,但在那里找不到函数或触发器。

google-apps-script google-sheets google-calendar-api
1个回答
0
投票
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();
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.