根据Google表格中的日期列表创建重复的全天日历活动

时间:2019-11-01 04:12:53

标签: google-apps-script google-sheets calendar recurring-events

我在A列中有一个日期列表(从A2开始),在B列中有一个标题文本(从B2开始)。我的单元格E2中列出了我的日历ID。

我想将此数据发送到Google日历以创建重复的全天日历活动。更改电子表格后,该日历应会更新。

2 个答案:

答案 0 :(得分:1)

这是我为您找到的。基于我的理解,可能是我错了。只是想帮助您。

https://www.quora.com/How-do-I-automatically-add-events-to-a-Google-Calendar-from-a-Google-Sheet

或者您可以使用应用程序为您完成此任务,这是分步指南

https://zapier.com/apps/google-calendar/tutorials/how-to-create-calendar-events-from-spreadsheet-tutorial

答案 1 :(得分:0)

我写了这段小代码,使用工作表中的数据创建重复事件。

我没有在触发器中编写此代码,因此您必须手动运行它。可以用onEdit trigger编写,但是我认为这不是最好的主意,因为您很快就会遇到大量重复事件,尽管可以通过添加一些条件来避免这种情况,例如检查具有这些特征的事件已经存在:

function createEvents() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var lastRow = sheet.getLastRow();
  var firstRow = 2;
  var firstCol = 1;
  var numRows = lastRow - firstRow + 1;
  var numCols = 2;
  var data = sheet.getRange(firstRow, firstCol, numRows, numCols).getValues();
  var calId = sheet.getRange("E2").getValue();
  var cal = CalendarApp.getCalendarById(calId);
  var recurrence = CalendarApp.newRecurrence().addYearlyRule();
  for(var i = 0; i < data.length; i++) {
    var title = data[i][1];
    var date = new Date(data[i][0]);
    var event = cal.createAllDayEventSeries(title, date, recurrence);
  }
}

此外,如果要在创建新事件时删除以前创建的事件,则应跟踪所有旧事件并对此代码进行一些编辑,但是我不确定要删除它们。

更新:

如果要在编辑工​​作表时创建事件,而不必手动运行该函数,则建议使用onEdit trigger创建与已写行相对应的事件。另外,仅当行中的数据有效(列A和B不为空,并且列A中的值是有效的Date)时,才可以添加条件以创建事件。

以下功能可完成所有先前的操作:

function createEvent(e) {
  var sheet = e.source.getActiveSheet();
  var range = e.range; // Edited range
  var rowIndex = range.getRow(); // Edited row index
  var firstCol = 1;
  var numCols = 2;
  var data = sheet.getRange(rowIndex, firstCol, 1, numCols).getValues()[0];
  var title = data[1];
  var date = data[0];
  // Check whether column A is a valid Date and column B is not empty:
  if(Object.prototype.toString.call(date) === '[object Date]' && title != "") {
    var calId = sheet.getRange("E2").getValue(); // Get calendar id from cell 'E2'
    var cal = CalendarApp.getCalendarById(calId);
    var recurrence = CalendarApp.newRecurrence().addYearlyRule();
    var event = cal.createAllDayEventSeries(title, date, recurrence); // Create event
  }  
}

为了在编辑时运行,此功能需要一个onEdit触发器。此触发器必须为installed,因为simple trigger cannot access services that require authorization

您可以by following these steps手动安装此触发器(如果配置触发器的类型时遇到问题,check this screenshot)。

您也可以通过编程方式安装此触发器as explained here

请让我知道现在是否适合您。希望对您有所帮助。