不满足条件时在IF语句中执行代码

时间:2018-07-29 03:56:10

标签: javascript google-apps-script

我有一个包含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);
    }
  }
}

1 个答案:

答案 0 :(得分:0)

根据评论中的建议,我确定在Google表格的“零”日期(即12/30/1899 0:00:00)正在处理“空”单元格。因此,尽管我无法在单元格中看到一个值,但代码仍在获取该值。一旦我设置了endTime必须大于startTime的条件,它就会解决(并清除了电子表格中的一些错误,其中一个用户确实输入了早于开始时间的结束时间)。