Современные программы для создания электронных таблиц имеют много интересных функций, которые делают работу пользователя с данными более комфортной. Одна из таких функций "Проверка данных" ("Data Validation") позволяет контролировать корректность ввода данных в ячейке электронной таблицы. Контроль достигается за счет ограничения типа данных или значений, которые можно ввести в ячейку. Одним из часто используемых применений механизма проверки данных является создание выпадающих списков. Давайте посмотрим, как создать выпадающий список в ячейке электронной таблицы "руками" в Google Таблицы и Microsoft Excel. А также создадим его из программы.
Предположим, что нам необходимо в ячейке или диапазоне ячеек ограничить пользователя вводом названия календарного месяца.
Google Таблицы. Выбираем нужную ячейку и в пункте меню "Данные" выбираем "Настроить проверку данных". В открывшемся диалоге достаточно указать "Значение из списка" в поле "Правила" и через запятую список значений. Остальные параметры заполняются "по вкусу".
Сохраняем и наслаждаемся выпадающим списком:
Microsoft Excel. Кто у кого списал - не известно, но тут реализация такая же. Выбираем закладку "Данные" (Data) и нажимаем кнопку "Проверка данных" (Data Validation).
В открывшемся диалоге в поле "Тип данных" выбираем "Список", а в поле "Источник" вносим список значений. Только в отличии от Google Таблицы, значения в списке должны быть разделены точкой с запятой. Нажимаем кнопку ОК и получаем выпадающий список:
Как видите все просто. При желании, и у Google и в Excel, вместо фиксированного списка можно указать диапазон ячеек (например, справочник со скрытого листа).
Так же просто это сделать и из программы на Delphi. Для используемой мной библиотеки TMS FlexCel это два шага: первый - заполнив запись типа TDataValidationInfo описать правила проверки данных в ячейке, а второй - добавить описанную проверку ячейке или их диапазону. Описать правила проверки данных можно вызвав функцию TDataValidationInfo.Create, которая имеет следующие параметры:
В качестве примера приведу код тестовой процедуры:
Предположим, что нам необходимо в ячейке или диапазоне ячеек ограничить пользователя вводом названия календарного месяца.
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;
Комментариев нет:
Отправить комментарий