Использование IndexOf с датами и Google Sheets - PullRequest
3 голосов
/ 01 декабря 2019

Я пытаюсь использовать .indexOf (), чтобы определить, в каком столбце содержится дата, извлеченная из другой вкладки на листах Google. Один лист называется «Основной», другой - «Данные». Код выглядит следующим образом:

function FindDate() {
     var ss = SpreadsheetApp.getActiveSpreadsheet();
     var ssProgram = ss.getSheetByName("Main");
     var range = ssProgram.getRange(2,3); 
     var programDate = range.getValue();

     var ssUpcoming = ss.getSheetByName("Data");
     var dateRange = ssUpcoming.getRange(1, 1, 1, ssUpcoming.getLastColumn());
     var HeaderFields = dateRange.getValues();

     Logger.log(HeaderFields[0]);
     Logger.log(HeaderFields[0].indexOf(programDate));


  Browser.msgBox('Greetings', "Done", Browser.Buttons.OK);

}

Все даты уникальны, поэтому должно возвращаться только 1 значение. Я знаю, просматривая массив, даты находятся в следующем формате: «Суббота, 09: 23: 00 GMT-08: 00 2019». Меня интересует только та же дата, остальные могут быть какими угодно, не зная, как искатьв этой части индекса?

мои идеи состоят в том, чтобы каким-то образом получить дату поиска в правильном формате или использовать .map для изменения формата даты в массиве. Есть ли более простой способ.

Спасибо

вот копия образца файла

https://docs.google.com/spreadsheets/d/15ugbvEJ1-ot0G0EKQcL9SbZhr9KKJ8E2G9CX1nm8CAM/copy

1 Ответ

2 голосов
/ 01 декабря 2019
  • Вы хотите получить индекс элемента, который совпадает с programDate, от HeaderFields[0], используя indexOf.
  • Вы хотите узнать причину вашей текущей проблемываш сценарий.
  • Вы хотите добиться этого с помощью Google Apps Script.

Если мое понимание верно, как насчет этого ответа? Пожалуйста, подумайте об этом как об одном из нескольких возможных ответов.

Если каждое значение в значениях ячеек "B1: P1" равно только одному, как насчет следующей модификации?

Точка модификации:

В вашем скрипте используется объект даты, потому что когда дата извлекается с помощью getValue() и getValues(), полученные значения являются объектом даты. Таким образом, HeaderFields[0].indexOf(programDate) всегда равен -1.

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

Шаблон 1:

В этом шаблонедата извлекается в виде строки с помощью getDisplayValue() и getDisplayValues().

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

От:
var programDate = range.getValue();
До:
var programDate = range.getDisplayValue();

и

От:
var HeaderFields = dateRange.getValues();
До:
var HeaderFields = dateRange.getDisplayValues();

Шаблон 2:

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

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

От:
Logger.log(HeaderFields[0].indexOf(programDate));
До:
Logger.log(HeaderFields[0].map(function(e) {return e instanceof Date ? e.getTime() : e}).indexOf(programDate.getTime()));

или

От:
Logger.log(HeaderFields[0].indexOf(programDate));
До:
Logger.log(HeaderFields[0].map(function(e) {return e instanceof Date ? e.toISOString() : e}).indexOf(programDate.toISOString()));

Примечание:

  • При указанных выше модификациях все результаты: 1.

Ссылки:

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

...