【问题标题】:Prevent duplicate calendar events from Apps Script防止来自 Apps 脚本的重复日历事件
【发布时间】:2020-10-05 05:49:15
【问题描述】:

我已经阅读了一些关于 SO 和其他地方的帖子,了解如何防止脚本在每次运行时继续添加重复的日历事件。到目前为止,我一直未能成功阻止重复。

这是我的代码:

function onOpen() {
 var ss = SpreadsheetApp.getActiveSpreadsheet();
  var menuEntries = [ {name: "Push to Calendar", functionName: "sendCalendarEvents"} ];
  ss.addMenu("Custom Menu", menuEntries);

}

function sendCalendarEvents() {
  var spreadsheet = SpreadsheetApp.getActiveSheet();
  var calendarId = spreadsheet.getRange('G1').getValue();
  var eventCal = CalendarApp.getCalendarById(calendarId);
  var lastRow = spreadsheet.getLastRow();
  var count = spreadsheet.getRange("A3:E"+lastRow+"").getValues();//five columns
  var minutesBefore = 462
  for (x=0; x<count.length; x++) {
      var row = count[x];
      var title = row[0];
      var startTime = row[1];
      var endTime = row[2];
      var guests = row[3];
      var description = row[4];
      var location = row[5];      
      var id = row[7];no row[7]

    var options = {
          'location': location,
          'description': description,
          'guests':guests +',',
          'sendInvites': 'True',
      }

   if(!id) {

   var event = eventCal.createAllDayEvent(title, startTime, options); 
    var newEventId = event.getId();
     spreadsheet.getRange(x+3,7).setValue('yes');
     spreadsheet.getRange(x+3,8).setValue(newEventId);

    event.addEmailReminder(minutesBefore);

     Logger.log('Event ID: ' + event.getId());

这是我的电子表格(带有“测试”数据)

我也尝试过 'if' 语句的变体(例如 if (row[x][7] != 'yes')...create the event),但没有'也不行。

有什么帮助吗?解决重复问题后,我希望能够让用户在电子表格中编辑事件的日期或标题等,并删除现有事件,然后是一个新事件(具有更新的标题/日期)已创建...如果可能的话。

感谢您提供的任何帮助!

【问题讨论】:

  • 每次您在日历中创建事件时,使用一列作为标志来告知该事件已创建,并在创建任何其他事件之前阅读该列以确保其为空。当然,一个问题是,如果从日历中删除事件,那么您必须有另一个功能来定期读取您的电子表格以使其与您的日历保持同步。
  • 您是如何在测试电子表格的 H 列中创建这些 EventId 值 @google.com 的?它们是由某个生成器创建的,还是从您日历中的相应事件中检索出来的?在这种情况下,你是怎么做到的?谢谢

标签: google-apps-script google-sheets google-calendar-api


【解决方案1】:

您的数据中只有五列。没有行[7]

 var count = spreadsheet.getRange("A3:E"+lastRow+"").getValues();//only five columns in your data
  var minutesBefore = 462
  for (x=0; x<count.length; x++) {
      var row = count[x];
      var title = row[0];
      var startTime = row[1];
      var endTime = row[2];
      var guests = row[3];
      var description = row[4];
      var location = row[5];      
      var id = row[7];//Problem is right here...there is no row[7];

【讨论】:

  • 是的!就在眼前……谢谢库珀。像我这样的新手非常感谢您的帮助。
猜你喜欢
  • 2022-12-06
  • 2014-11-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多