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 шт):
К сожалению, вставка даты через 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



