Создание подтверждения данных с помощью пользовательской формулы - PullRequest
0 голосов
/ 30 января 2019

Я хочу создать DataValidation для ячейки в листах Google с помощью сценариев приложения Google, но не могу найти синтаксис для создания формулы custum для проверки.

Моя идея заключается в создании кода для проверкиформат времени ЧЧ: ММ.Для этого у меня уже есть работающее Regexp (функция CheckRegexp)

Единственная документация, которую я нашел до сих пор по этому вопросу, это: https://developers.google.com/apps-script/reference/spreadsheet/data-validation-criteria

function test() {
        var sheet = SpreadsheetApp.getActiveSheet();
        var cell = sheet.getRange("E4");
        var criteria = SpreadsheetApp.DataValidationCriteria.CUSTOM_FORMULA
        //Custom formula CheckRegexp
        var dv = SpreadsheetApp.newDataValidation().withCriteria(criteria, args).build();
        cell.setDataValidation(dv);
}

function CheckRegexp(input) {
  return /^([0-9]|0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$/.test(input);
}

Я хочурезультатом будет проверка данных для моего регулярного выражения в диапазоне желаний.

Ответы [ 2 ]

0 голосов
/ 31 января 2019

Ниже приведен еще один способ проверки данных:

=AND(ISDATE(E4), TEXT(E4, "hh:mm")=TO_TEXT(E4))

Функция REGEXMATCH также подходит, но для кого-то она может быть менее читаемой.Кстати, оба случая не отклоняют неправильный числовой ввод (я не знаю почему).Они помечают только ячейки как «Недействительные: содержимое этой ячейки нарушает правило проверки».

0 голосов
/ 30 января 2019

Невозможно установить пользовательскую формулу (на основе сценариев) в качестве критерия проверки данных.Пользовательская формула в этом контексте (DataValidationCriteria.CUSTOM_FORMULA) относится к пользовательской формуле, создавая вложенные формулы.

Возможные решения:

  • Использование триггера редактирования onEdit(e) чтобы проверить каждое редактирование, защищает ли оно условие и очистить ячейку e.range.clear(), если нет, ИЛИ

  • Использовать встроенную формулу, например:

    =REGEXMATCH(TO_TEXT(E4),"^([0-9]|0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$")
    

Для чтения:

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