从Google工作表中的日期列表创建周期性全天日历事件



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

我想将这些数据发送到谷歌日历,以创建重复的全天日历事件。此日历应在电子表格更改时更新。

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

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

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

我没有在触发器中写这个,所以你必须手动运行它。它可以写在onEdit触发器中,但我认为这不是最好的主意,因为你很快就会有堆积如山的重复事件,尽管这可以通过添加一些检查具有这些特征的事件是否已经存在的条件来避免:

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触发器来创建与已写入的行相对应的事件。此外,只有当行中的数据有效(列a和B不为空,并且列a中的值为有效日期(时,才能添加条件来创建事件。

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

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触发器。必须安装此触发器,因为简单的触发器无法访问需要授权的服务。

您可以按照以下步骤手动安装此触发器(如果您在配置触发器类型时遇到问题,请查看此屏幕截图(。

您也可以通过编程方式安装此触发器,如下所述。

请告诉我这对你现在是否有效。我希望这能有所帮助。

最新更新