首页 > 解决方案 > 谷歌脚本中的多个日历 ID

问题描述

编程新手,在尝试将多个日历 ID 添加到下面的脚本时,我一直在碰壁。我需要它来遍历行,如果该事件尚未添加到日历中,请将其添加到我的日历和其他人的日历中,因为工作表得到更新。

function addToCal() {
  var ss = SpreadsheetApp.getActiveSpreadsheet(),
      sheet = ss.getSheetByName("ProductionSchedule"),
      range = sheet.getActiveRange(),
      row = range.getRow(),
      data = sheet.getRange(row, 1, 1, 26).getValues(),
      date = data[0][6];
  if (date =='') return;
  var today = new Date(),
      startDate = new Date(today.setMonth(today.getMonth()-1)),
      endDate = new Date(today.setMonth(today.getMonth()+6)),
      calId = 'calendarID',
      cal = CalendarApp.getCalendarById(calId),
      events = cal.getEvents(startDate, endDate),
      titles = [];
  for (var i = 0, len = events.length; i < len; i++)
    titles.push(events[i].getTitle());
  var item = ('Produção de' + ' ' + data[0][3]),
      qtd = ('Qtd (und): ' + data[0][5]),
      local = ('Local de Produção: ' + data[0][4]);
  var index = titles.indexOf(item),
      ok = 1;
  if (index > -1)
  {
    var eventDate = events[index].getAllDayStartDate();
    if (eventDate.getTime() == date.getTime()) var ok = 0;
    else events[index].deleteEvent();
  }
  if (ok) 
    cal.createAllDayEvent(item, date, {description: qtd, location: local})
    .removeAllReminders();
}

目前,它将事件设置为我的日历,其中包含项目描述作为事件标题、产品名称、数量和描述字段中的生产位置。我需要将相同的信息添加到其他人的日历中。

此外,这不能将我标记为忙碌,并且该活动不需要是全天活动。

任何帮助表示赞赏。干杯,

标签: google-apps-scriptgoogle-sheetsgoogle-calendar-api

解决方案


为了重复多个日历的日历交互,您需要创建一组日历 ID 并循环遍历它们。

一种方法是:

var CALENDER_IDS = [
  "calendarID1",
  "calendarID2",
  "calendarID3",
]

func addToCal() {

  ... spreadsheet data extraction and date calculations ...

  for (var i = 0, clen = CALENDER_IDS.length; i < clen; i++) {
    var cal = CalendarApp.getCalendarById(CALENDER_IDS[i]);

    ... calendar interactions ...
  }
}

如果您使用上面的代码,请确保更新标题循环中的计数器变量(即它们都不能i)。常见的做法是让内部循环使用j,k等。


推荐阅读