我有一个包含400多个日历事件的工作表,并且我正在尝试编写一个脚本,该脚本将从电子表格中获取这些事件并在Google日历中为其创建事件。为了防止脚本在每次运行时都复制事件,我在电子表格的最后一栏中将 eventID 设置为选中项。逻辑是,如果 startTime 列和 endTime 列不为空,并且 EventID 列为空,则脚本应运行并创建一个新事件,然后将ID登录到最后一列。
我发现代码始终在最后一列中记录一个 eventID ,这意味着即使没有满足条件,它也会每次创建一个事件。
function createCalendarEvent() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName('MasterList');
var data = sheet.getSheetValues(3, 1, sheet.getLastRow(), 12);
var calendar = CalendarApp.getCalendarById('*CalendarID*');
for (var i = 0; i <= sheet.getLastRow(); i++) {
var title = data[i][0]; //String
var date = new Date(data[i][1]); //Date
var startTime = new Date(data[i][9]); //DateTime
var endTime = new Date(data[i][10]); //DateTime
var location = data[i][5]; //String
var status = data[i][11]; //String
var allDay = data[i][3]; //String
if (allDay === 'ALL DAY' && status === ''){
var allDayEvent = calendar.createAllDayEvent(title, date, {location: location});
sheet.getRange(i + 3, 12).setValue(allDayEvent.getId());
}
else if (startTime !== '' && endTime !== '' && status === '' ) {
var event = calendar.createEvent(title, startTime, endTime, {location: location});
sheet.getRange(i + 3, 12).setValue(event.getId());
}
else {
Logger.log('\nRow %s is missing start and/or end time or the event has already been created.\n', i + 3);
}
}
}
答案 0 :(得分:0)
根据评论中的建议,我确定在Google表格的“零”日期(即12/30/1899 0:00:00)正在处理“空”单元格。因此,尽管我无法在单元格中看到一个值,但代码仍在获取该值。一旦我设置了endTime必须大于startTime的条件,它就会解决(并清除了电子表格中的一些错误,其中一个用户确实输入了早于开始时间的结束时间)。