使用 Google Apps 脚本根据 Google 表格从 Google 日历中删除事件

初学者

这里绝对是菜鸟!

背景:

  • 我正在尝试创建一个 Google 表格,我可以针对一系列事件进行更新,并且
  • 根据这些条目创建 Google 日历事件
  • 到目前为止,我成功地创建了日历事件并使用 EventID (iCalUID) 更新了工作表的最后一列 - 感谢其他 stackoverflow 帖子
  • 通过检查最后一列中是否已经存在 EventID (iCalUID),我也成功地不创建重复项 - 再次感谢其他 stackoverflow 帖子

但是......还有另一个要求,我失败的地方:

  • 需要在工作表的一列中将现有事件标记为“已取消”,并且
  • 如果这是“真”,则从相应的最后一个单元格(具有“已取消”条目的那一行)中查找 EventID (iCalUID) 和
  • 从日历中删除该特定事件
  • 此外,只要该单元格保留/保留“已取消”一词,就不应该再次创建日历事件。
  • 刚刚添加了下面脚本中的“var check1 = row[23]; //Booked/Blocked/Cancelled”以引入我想要的逻辑,但有点无法继续

表格的相关屏幕截图

我到目前为止使用的代码如下:

function onOpen() {
  var ui = SpreadsheetApp.getUi();
  ui.createMenu('Sync to Calendar')
  .addItem('Sync Now', 'sync')
  .addToUi();
}

function sync() {
  var sheet = SpreadsheetApp.getActive().getSheetByName('Sheet1');
  var calendar = CalendarApp.getCalendarById('[email protected]');
  var startRow = 2;  // First row from which data should process > 2 exempts my header row
  var numRows = sheet.getLastRow();   // Number of rows to process
  var numColumns = sheet.getLastColumn();
  var dataRange = sheet.getRange(startRow, 1, numRows-1, numColumns);
  var data = dataRange.getValues();

  for (var i = 0; i < data.length; ++i) {
    var row = data[i];
    var name = row[1];  //Name of Guest
    var place = row[4];  //Add2
    var room = row[9]; //Room Number    
    var inDate = new Date(row[10]);  //Check-In Date
    var outDate = new Date(row[11]); //Check-Out Date
    var check1 = row[23];  //Booked/Blocked/Cancelled
    var check2 = row[24]; //Event created and EventID (iCalUID) populated 
    
   if (check2 == "") {
      var currentCell = sheet.getRange(startRow + i, numColumns);
      var event = calendar.createEvent(room, inDate, outDate, {
      description: 'Booked by: ' + name + ' / ' + place + '\nFrom: ' + inDate + '\nTo: ' + outDate
      });
      var eventId = event.getId();
      currentCell.setValue(eventId);
    }
  }
}
Tanaike

我相信你的目标如下。

  • 您想检查列“X”和“Y”。
  • 当“X”列不是Cancelled且“Y”列为空时,您要创建一个新事件。
  • 当“X”Cancelled列不为空而“Y”列不为空时,您要删除现有事件。
  • 当列“X”为 时Cancelled,您不想创建新事件。

在这种情况下,如何进行以下修改?

修改后的脚本:

在这个脚本中,为了检查事件是否已经被删除,使用了日历 API。因此,请在 Advanced Google services 中启用 Calendar API

function sync() {
  var calendarId = '[email protected]'; // Please set your calendar ID.

  var sheet = SpreadsheetApp.getActive().getSheetByName('Sheet1');
  var calendar = CalendarApp.getCalendarById(calendarId);
  var startRow = 2;  // First row from which data should process > 2 exempts my header row
  var numRows = sheet.getLastRow();   // Number of rows to process
  var numColumns = sheet.getLastColumn();
  var dataRange = sheet.getRange(startRow, 1, numRows - 1, numColumns);
  var data = dataRange.getValues();
  var done = "Done";  // It seems that this is not used.
  for (var i = 0; i < data.length; ++i) {
    var row = data[i];
    var name = row[1];  //Name of Guest
    var place = row[4];  //Add2
    var room = row[9]; //Room Number    
    var inDate = new Date(row[10]);  //Check-In Date
    var outDate = new Date(row[11]); //Check-Out Date
    var check1 = row[23];  //Booked/Blocked/Cancelled
    var check2 = row[24]; //Event created and EventID (iCalUID) populated 
    
    // I modified below script.
    if (check1 != "Cancelled" && check2 == "") {
      var currentCell = sheet.getRange(startRow + i, numColumns);
      var event = calendar.createEvent(room, inDate, outDate, {
        description: 'Booked by: ' + name + ' / ' + place + '\nFrom: ' + inDate + '\nTo: ' + outDate
      });
      var eventId = event.getId();
      currentCell.setValue(eventId);
    } else if (check1 == "Cancelled" && check2 != "") {
      var status = Calendar.Events.get(calendarId, check2.split("@")[0]).status;
      if (status != "cancelled") {
        calendar.getEventById(check2).deleteEvent();
      }
    }
  }
}

参考:

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用Google Apps脚本根据Google表格中的值禁用日期选择器中的日期

使用Google表格中的输入来换行(Google Apps脚本)

如何使用Google Apps脚本清除Google表格中的列?

如何使用 Apps 脚本删除 Google 表格中的行?

Google Apps脚本-删除Google表格中的部分文本

Google Apps 脚本 - 使用此脚本/公式获取 Google 表格中某些选定表格的价值

使用Google Apps脚本从Google云端硬盘或URL将图像插入Google表格中

使用 Apps 脚本在 Google 表格中自动设置列的日期

使用 Google Apps 脚本,如何替换 Google 表格模板中的文本以制作新表格?

使用Google Apps脚本删除Google表格中的所有过滤器

使用APIv4(Google Apps脚本)过滤Google表格

使用Google Apps脚本从Google表格导出PDF时的setName

Google表格+ Apps脚本:如何根据单元格的值按名称删除表格

Google Apps脚本:Google表格分组

在Google Apps脚本中调用Google表格插件?

使用 Google 表格中的数据在 Google Apps 脚本中自动完成

如何使用Google文档中的Google Apps脚本设置表格中某行的背景颜色?

使用/在Google Apps脚本中在大型Google表格中搜索行的最快方法

使用 Google Apps 脚本和 JavaScript 根据电子表格中的多列获取唯一值

使用Google Apps脚本为Google文档中的表格设置“左缩进”

如何使用 Google Apps 脚本将二维数组写入 Google 表格中的单列?

搜索值,然后在Google表格中查找并使用Google Apps脚本以html显示行值

如何使用 Google Apps 脚本检查 Google 表格中的 URL 重定向

如何使用Google Apps脚本在Google文档中的特定文本后追加表格?

使用 Google Apps 脚本填充 Google 文档中的表格单元格

如何使用Apps脚本获取Google日历事件附件

使用Apps脚本删除Google表格中的空白行后,是否要复制数据?

如何使用Google Apps脚本将Google云端硬盘文件名记录到Google表格中

使用Google Apps脚本在Google表格中添加带日期的行,并保留表格中指定的日期格式