findAll() поиск по дате в столбцах

Подскажите как правильно будет сделать поиск по времени.

введите сюда описание изображения

var sheet = SpreadsheetApp.openById() //открываем таблицу
var dat1 = Utilities.formatDate(new Date(), "GMT+3", "dd.MM.yyyy HH:mm:ss") // дата для записи в таблицу
var datfind = Utilities.formatDate(new Date(), "GMT+3", "dd.MM.yyyy HH") // нужен поиск по дате и часу (без учета минут и секунд)
var SHTvalues = shetname.createTextFinder(datfind).findAll() // сам поиск 
// если указанное значение не найден в первом столбце то производим запись если же нет то просто закрываем
shetname.appendRow( [dat1, params["text"] ) // сама запись

Ответы (1 шт):

Автор решения: contributorpw

К сожалению, вставка даты через appendRow может быть не очевидной.

Необходимо рассмотреть данные, которые добавляются при этом.

Пример форматированных данных

30.09.2022 05:39:07

Пример данных, при вставке через appendRow

30.09.2022 5:40:16

введите сюда описание изображения

Т.к. поиск происходит по тексту, то это необходимо учитывать. Возможно, использование регулярных выражений как-то может помочь.

Второй неочевидностью является то, что код должен учитывать локальные настройки, которые использует скрипт и Таблица. Для начала необходимо ограничиться соглашением для всех пользователей, какие настройки вы используете и запретить настраивать формат дат. Мои настройки ниже

введите сюда описание изображения

Чтобы преодолеть эту неочевидность, вы можете использовать отдельную колонку с заранее известным форматированием, например

=TEXT(A14;"yyyyMMdd.HHmm")

введите сюда описание изображения

, тогда придется добавлять еще одно поле для каждой строки, где формировать такое значение для индекса поиска и искать уже по этому полю.

Пример, без дополнительного поля с поиском по тексту

/**
 * @param {globalThis.SpreadsheetApp.Range} range
 * @param {Date} date
 * @param {any[]} rowValues
 * 
 * @returns {globalThis.SpreadsheetApp.Sheet}
 */
function appendRowByDate_(range, date, rowValues) {
  const findText = Utilities.formatDate(date, "GMT+3", "dd.MM.yyyy H:mm");
  const ranges = range.createTextFinder(findText).findAll();
  const sheet = range.getSheet();
  if (!ranges.length){
    sheet.appendRow([date, ...rowValues]);
  }
  return sheet;
}

Обратите внимание на формат строки "dd.MM.yyyy H:mm".

Рабочий пример в Таблице https://docs.google.com/spreadsheets/d/1rP0CKD9oxGEsc5YkKOtCdgQIsp2IR9KEEYkcNA3AVYM/edit?usp=sharing

→ Ссылка