Google apps script 从Google工作表中的日期列表创建定期全天日历事件

Google apps script 从Google工作表中的日期列表创建定期全天日历事件,google-apps-script,google-sheets,calendar,recurring-events,Google Apps Script,Google Sheets,Calendar,Recurring Events,我在a栏有一个日期列表(从A2开始),在B栏有一个标题文本(从B2开始)。我的日历ID列在单元格E2中 我想将这些数据发送到谷歌日历,以创建周期性的全天日历事件。当电子表格更改时,此日历将更新。以下是我为您找到的内容。这是基于我的理解,可能是我错了。我只是想帮你 或者您可以使用应用程序为您完成此任务,这里是逐步指南 我编写了这段代码,它使用工作表中的数据创建重复事件 我没有在触发器中写入此命令,因此您必须手动运行此命令。它可以用一种语言编写,但我认为这不是最好的主意,因为很快就会出现大量重复事

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


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

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

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


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

我没有在触发器中写入此命令,因此您必须手动运行此命令。它可以用一种语言编写,但我认为这不是最好的主意,因为很快就会出现大量重复事件,即使通过添加一些条件来检查具有这些特征的事件是否已经存在,这也是可以避免的:

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
触发器。这个触发器必须是,因为一个

您可以手动安装此触发器(如果在配置触发器类型时遇到问题)

也可以通过编程方式安装此触发器


请让我知道,如果你现在的工作。我希望这能有所帮助。

您希望您的事件有什么类型的重复发生?每周?月刊每年?我希望事件每年重复一次。因此,您希望在每次编辑电子表格时在日历中创建多个事件。我不确定这是否是一个好主意,因为很快就会出现大量重复事件,即使通过添加一些条件来检查具有这些特征的事件是否已经存在,这也是可以避免的。更重要的是,如何处理工作表中不再存在的先前创建的事件?应该删除吗?喂,你的问题解决了吗?记住,为了将你的问题标记为已解决,你应该接受任何能解决问题的答案。如果情况不是这样,你的问题没有解决,考虑一下为什么不是这样,这样这个社区可以帮助你。我绝对不想创造多个事件的山脉。我还没有找到解决办法。我尝试过谷歌表单脚本,但没有成功。Zapier-zap正在工作,只是它在我的Google工作表中列出的活动中创建了一天的活动。
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
  }  
}