29 марта 2020

Создание выпадающего списка в ячейке электронной таблицы

    Современные программы для создания электронных таблиц имеют много интересных функций, которые делают работу пользователя с данными более комфортной. Одна из таких функций "Проверка данных" ("Data Validation") позволяет контролировать корректность ввода данных в ячейке электронной таблицы. Контроль достигается за счет ограничения типа данных или значений, которые можно ввести в ячейку. Одним из часто используемых применений механизма проверки данных является создание выпадающих списков. Давайте посмотрим, как создать выпадающий список в ячейке электронной таблицы "руками" в Google Таблицы и Microsoft Excel. А также создадим его из программы.
    
    Предположим, что нам необходимо в ячейке или диапазоне ячеек ограничить пользователя вводом названия календарного месяца.

    Google Таблицы. Выбираем нужную ячейку и в пункте меню "Данные" выбираем "Настроить проверку данных". В открывшемся диалоге достаточно указать "Значение из списка" в поле "Правила" и через запятую список значений. Остальные параметры заполняются "по вкусу".


Сохраняем и наслаждаемся выпадающим списком:


    Microsoft Excel. Кто у кого списал - не известно, но тут реализация такая же. Выбираем закладку "Данные" (Data) и нажимаем кнопку "Проверка данных" (Data Validation).


В открывшемся диалоге в поле "Тип данных" выбираем "Список", а в поле "Источник" вносим список значений. Только в отличии от Google Таблицы, значения в списке должны быть разделены точкой с запятой. Нажимаем кнопку ОК и получаем выпадающий список:


Как видите все просто. При желании, и у Google и в Excel, вместо фиксированного списка можно указать диапазон ячеек (например, справочник со скрытого листа).

    Так же просто это сделать и из программы на Delphi. Для используемой мной библиотеки TMS FlexCel это два шага: первый - заполнив запись типа TDataValidationInfo описать правила проверки данных в ячейке, а второй - добавить описанную проверку ячейке или их диапазону. Описать правила проверки данных можно вызвав функцию TDataValidationInfo.Create, которая имеет следующие параметры:
Наименование Тип данных Описание
aValidationType TDataValidationDataType Тип проверки. Она может быть: жестко типизированной (integer, decimal, date, time), произвольной или даже определяться формулой
aCondition TDataValidationConditionType Условие используемое при проверке данных (различные варианты условий для FirstFormula и SecondFormula)
aFirstFormula UTF16String Формула для первого условия проверки данных
aSecondFormula UTF16String Формула для второго условия проверки данных (если оно имеет два условия)
aIgnoreEmptyCells Boolean Если True, то пустые ячейки не будут вызывать ошибки проверки данных
aInCellDropDown Boolean Если ValidationType=List, то это свойство указывает отображать раскрывающийся список или нет (если нет, то выполняется только проверка корректности)
aExplicitList Boolean Если True, то FirstFormula содержит список значений, т.е. она должна быть формулой типа ="строка", где строка - это список значений разделенных символом #0
aShowErrorBox Boolean Если True, то при вводе некорректного значения показывается сообщение об ошибке
aErrorBoxCaption UTF16String Замена стандартного заголовка сообщения об ошибке (если aShowErrorBox=True)
aErrorBoxText UTF16String Замена стандартного текста сообщения об ошибке (если aShowErrorBox=True)
aShowInputBox Boolean Если True, то когда пользователь выбирает ячейку с проверкой данных будет показываться подсказка
aInputBoxCaption UTF16String Заголовок подсказки (если aShowInputBox=True)
aInputBoxText UTF16String Текст подсказки (если aShowInputBox=True)
aErrorIcon TDataValidationIcon Иконка диалога сообщения об ошибке (Stop, Warning, Information)

В качестве примера приведу код тестовой процедуры:
procedure DataValidationTest;
var
  xls: TExcelFile;
  dv : TDataValidationInfo;
begin
  xls := TXlsFile.Create(1, True);
  try
    xls.SetCellValue(1, 1, 'Месяц');

    dv := TDataValidationInfo.Create(
            TDataValidationDataType.List, // используем встроенный список
            TDataValidationConditionType.Between, // для списка игнорируется
            '="'+string.Join(#0, FormatSettings.LongMonthNames)+'"',//список
            '', // для списка игнорируется
            False, // запретим пустые ячейки
            True,  // отображаем раскрывающийся список
            True, // True, т.к. наше свойство FirstFormula содержит список
            True, // сообщим пользователю о недопустимом значении
            'Аларма',  // свой заголовок сообщения об ошибке
            '', // оставим стандартное сообщение об ошибке
            True, // покажем пользователю подсказку
            '', // подсказка без заголовка
            'Введите месяц', // текст подсказки
            TDataValidationIcon.Warning);
    // добавим проверку данных в указанный диапазон
    xls.AddDataValidation(TXlsCellRange.Create('A2:A5'), dv);

    xls.Save('dv.xlsx');
  finally
    xls.Free;
  end;
end;
    Функция электронных таблиц "Проверка данных" не ограничивается созданием выпадающего списка - это простой, но достаточно гибкий и мощный механизм контроля корректности вводимой пользователем информации.

Комментариев нет:

Отправить комментарий