Скрипт Google Apps: создание многодневных событий // Сравнение значений в нескольких строках - PullRequest
0 голосов
/ 09 марта 2020

Я пытался создать скрипт, который генерировал бы серию событий на весь день из списка дат. Список дат отформатирован следующим образом:

2020/01/01  promotion offer 1
2020/01/02  promotion offer 1
2020/01/03  promotion offer 2
2020/01/04  promotion offer 2
2020/01/05  promotion offer 2
2020/01/06  promotion offer 3

Итак, я пытаюсь создать событие, которое варьируется от 01/01 до 01/02 с заголовком «рекламное предложение 1», затем другое событие, которое варьируется от 01/03 до 01/05 и имеет заголовок «рекламное предложение 2», а затем другое мероприятие, которое длится всего один день и имеет заголовок «рекламное предложение 3».

Мой подход состоит в том, чтобы проверить, отличается ли значение в строке 1, столбце 2 от значения в строке 2, столбце 2. Но я не знаю, могу ли я включить эту проверку в "обычную" для l oop. Поэтому я попытался использовать два для циклов. Что не работает: D

Это то, что я пробовал до сих пор:

var alloffers = spreadsheet.getRange("E133:F141").getValues(); // speichert die Werte in der angegegeben Range in var offerkalender
  
  for (row=0; row<alloffers.length; row++) {
    
    var offer = alloffers[row];
    var date = offer[0];
    var conditions = offer[1];
    
  }
  
  for (row=1; row>alloffers.length; row++) {
  
    var nextoffer = alloffers[row];
    var nextdate = nextoffer[0];
    var nextconditions = nextoffer[1];
    
  }
  
  if (conditions != nextconditions) {
  
    eventCal.createAllDayEvent(conditions, date, nextdate);
    
  }

Кто-нибудь может помочь? :)

1 Ответ

1 голос
/ 09 марта 2020

Комментарий к вашему сообщению шел в правильном направлении. Самый простой способ сделать это - проверить, совпадает ли новая строка со старой, но вы также хотите продолжать проверять, есть ли дополнительные строки. Ниже я проверил значения и поместил их в новый массив заполнителей для даты начала, даты окончания и заголовка продвижения. Просто измените диапазон в переменной alloffers, и это должно работать для вас.

Примечание. При тестировании я заметил, что приложение календаря отключало последний день многодневных событий. Это происходило из-за обработки временных событий, поэтому все дневные события, начинающиеся с 1/1/2020 @ 00:00:00 до 1/3/2020 @ 00:00:00, будут переводиться как события всего дня 1/1 / 2020 и 1/2/2020, поэтому я переработал кодирование, чтобы добавить время к конечной дате многодневных событий, чтобы оно работало с 1/1/2020 @ 00:00:00 до 1/3 / 2020 @ 23: 59: 59.

  var alloffers = sheet.getRange("Your Range").getValues(); // speichert die Werte in der angegegeben Range in var offerkalender
  // create trimmed offers array
  var trimmedoffers = [];
  // set first array line to the first offer data
  trimmedoffers[0] = [alloffers[0][0],alloffers[0][0],alloffers[0][1]];
  for (var i=1, s=1; i<alloffers.length; i++) {
    // check if offer on this date matches offer on previous date
    if (alloffers[i][1] != alloffers[i-1][1]) {
      // if it does not, set new offer information into trimmed array
      trimmedoffers[s] = [alloffers[i][0],alloffers[i][0],alloffers[i][1]];
      s++;
    } else {
      // if it does, change end date of offer in trimmed array and add on 23:59:59
      trimmedoffers[s-1] = [trimmedoffers[s-1][0],new Date(alloffers[i][0].getTime()+86399000),trimmedoffers[s-1][2]]; 
    }
  }
  // use new array to create events based on total number of offers
  for (var t=0; t<trimmedoffers.length; t++) {
    // check if event is a single day
    if (trimmedoffers[t][0] == trimmedoffers[t][1]) {
      // if it is, create all day event
      eventCal.createAllDayEvent(trimmedoffers[t][2],trimmedoffers[t][0]); 
    } else {
       // if not, create an event from start time to finish time
      eventCal.createEvent(trimmedoffers[t][2],trimmedoffers[t][0],trimmedoffers[t][1]);
    }
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...