【发布时间】:2021-09-27 23:54:32
【问题描述】:
这里绝对是菜鸟!
背景:
- 我正在尝试创建一个 Google 表格,我可以针对一系列事件进行更新,并且
- 根据这些条目创建 Google 日历活动
- 到目前为止,我成功地创建了日历事件并使用 EventID (iCalUID) 更新了工作表的最后一列 - 感谢其他 stackoverflow 帖子
- 通过检查最后一列中是否已经存在 EventID (iCalUID) 也成功地不创建重复项 - 再次感谢其他 stackoverflow 帖子
但是...有另一个要求,我失败了:
- 需要在工作表的某一列中将现有活动标记为“已取消”,并且
- 如果这是“真”,则从相应的最后一个单元格(具有“已取消”条目的那一行)查找 EventID (iCalUID),然后
- 从日历中删除该特定事件
- 此外,只要该单元格保留/保留“已取消”一词,就不应再次创建日历事件。
- 刚刚添加了下面脚本中的“var check1 = row[23]; //Booked/Blocked/Cancelled”,以引入我想要的这个逻辑,但我有点无法继续
Relevant screen-shot of the sheet
到目前为止我使用的代码如下:
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('myemailid@gmail.com');
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);
}
}
}
【问题讨论】:
标签: google-apps-script google-sheets google-calendar-api google-sheets-api