Использование For-l oop для поиска даты в диапазоне дат [Google Sheets] - PullRequest
1 голос
/ 24 марта 2020

Я новичок в написании сценариев и не могу понять, почему этот For-l oop не работает для меня. Буду очень признателен за любую помощь.

Чего я пытаюсь достичь:

  • На листе «Сегодня» в ячейке D4 указана дата. Специфический c формат даты: «25 / 02/2020».
  • На другом листе «Будущее» представляет собой список дат, которые go от ячеек B8 и до нижней части столбца B .
  • Я хочу сравнить дату из ячейки D4 со всеми датами в B8: B таблицы «Будущее», и если она найдет совпадение, я хочу, чтобы она запустила самую последнюю строку сценария ниже (это не просто закрывающая скобка).
  • На листе «Будущее» в ячейке B9 указана та же дата с тем же форматом «25/02/2020», поэтому сценарий должен быть в состоянии найти совпадение.

Спасибо.

function onEdit(e) {

//This IF statement ensures that this onEdit macro only runs when cell B2 in the sheet 'Today' is edited.
  if (
    e.source.getSheetName() == "Today" &&
    e.range.columnStart == 2 &&
    e.range.columnEnd == 2 &&
    e.range.rowStart == 2 &&
    e.range.rowEnd == 2 
  ) { 

  //Defines the relevant sheets as variables:
    var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
    var Today = spreadsheet.getSheetByName("Today");  
    var Future = spreadsheet.getSheetByName("Future");  
  //Variables needed for the below:
    var futuredates = Future.getRange('B8:B').getValues();
    var Date = Today.getRange("D4").getValue();

  //CANNOT GET THIS TO WORK:
    for (var i = futuredates.length - 1; i > 0; i--) { 
     if (futuredates[i][0] == Date ) {   

        //This line is just to see if the above works::
        Today.insertRowsBefore(6, 1);

      }
    }
  }
}

1 Ответ

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

Как насчет этой модификации?

Шаблон 1:

Из вашего вопроса выяснилось, что для ячеек D4 и B8:B используется один и тот же формат даты. В этом шаблоне, используя это, в качестве строкового значения используется дата.

Модифицированный скрипт:

Когда ваш скрипт модифицирован, пожалуйста, измените его следующим образом.

От:
var futuredates = Future.getRange('B8:B').getValues();
var Date = Today.getRange("D4").getValue();
Кому:
var futuredates = Future.getRange('B8:B').getDisplayValues();
var Date = Today.getRange("D4").getDisplayValue();
  • В вашем сценарии может подойти if (futuredates[i][0] && Date && futuredates[i][0].getTime() == Date.getTime() ) {.

Шаблон 2:

В этом шаблоне дата используется в качестве объект даты.

Модифицированный скрипт:

Когда ваш скрипт модифицирован, пожалуйста, измените его следующим образом.

С:
if (futuredates[i][0] == Date ) {
Кому:
if (futuredates[i][0] && Date && futuredates[i][0].getTime() == Date.getTime() ) {

Примечание:

  • В соответствии с вышеуказанной модификацией, когда оператор if равен true, Today.insertRowsBefore(6, 1); выполняется.

Ссылки:

Если я неправильно понял ваш вопрос и это не то направление, которое вы хотите, я приношу свои извинения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...