Как работать с проверкой данных в .NET
Aspose.Cells FOSS for .NET позволяет добавлять правила проверки данных к диапазонам ячеек через Worksheet.Validations (ValidationCollection). Вызовите Add(CellArea) для создания объекта Validation и установите его Type с помощью ValidationType. Поддерживаемые типы включают List, Decimal и Custom. Установите с помощью dotnet add package Aspose.Cells_FOSS.
Пошаговое руководство
Шаг 1: Установить пакет
dotnet add package Aspose.Cells_FOSSШаг 2: Импортировать пространство имён
using Aspose.Cells_FOSS;Шаг 3: Добавить проверку выпадающего списка
Создайте CellArea с CellArea.CreateCellArea(), добавьте его в Worksheet.Validations и установите ValidationType.List со списком, разделённым запятыми, в Formula1.
using Aspose.Cells_FOSS;
var wb = new Workbook();
var ws = wb.Worksheets[0];
// Dropdown list for A1:A10
var listVal = ws.Validations[ws.Validations.Add(CellArea.CreateCellArea("A1", "A10"))];
listVal.Type = ValidationType.List;
listVal.Formula1 = "\"Open,In Progress,Closed\"";
listVal.InCellDropDown = true;
listVal.IgnoreBlank = true;
listVal.InputTitle = "Status";
listVal.InputMessage = "Choose a status from the dropdown";
wb.Save("list-validation.xlsx");
Console.WriteLine("List validation added.");Шаг 4: Добавить проверку числового диапазона
Используйте ValidationType.Decimal вместе с OperatorType.Between и Formula1/Formula2 для ограничения числового ввода.
using Aspose.Cells_FOSS;
var wb = new Workbook();
var ws = wb.Worksheets[0];
// Decimal range validation for B1:B10 — allow 0 to 100
var numVal = ws.Validations[ws.Validations.Add(CellArea.CreateCellArea("B1", "B10"))];
numVal.Type = ValidationType.Decimal;
numVal.Operator = OperatorType.Between;
numVal.Formula1 = "0";
numVal.Formula2 = "100";
numVal.ErrorTitle = "Out of Range";
numVal.ErrorMessage = "Please enter a number between 0 and 100.";
numVal.ShowError = true;
numVal.IgnoreBlank = true;
wb.Save("decimal-validation.xlsx");
Console.WriteLine("Decimal validation added.");Шаг 5: Объединить несколько проверок на одном листе
Вы можете добавить любое количество проверок на тот же лист, вызвав Validations.Add() несколько раз, каждый раз с разным CellArea.
using Aspose.Cells_FOSS;
var wb = new Workbook();
var ws = wb.Worksheets[0];
// List validation for column A (status)
var statusVal = ws.Validations[ws.Validations.Add(CellArea.CreateCellArea("A2", "A100"))];
statusVal.Type = ValidationType.List;
statusVal.Formula1 = "\"New,Open,Closed\"";
statusVal.InCellDropDown = true;
// Decimal validation for column B (score)
var scoreVal = ws.Validations[ws.Validations.Add(CellArea.CreateCellArea("B2", "B100"))];
scoreVal.Type = ValidationType.Decimal;
scoreVal.Operator = OperatorType.Between;
scoreVal.Formula1 = "0";
scoreVal.Formula2 = "10";
scoreVal.ShowError = true;
wb.Save("combined-validation.xlsx");
Console.WriteLine("Combined validations added to sheet.");Распространённые проблемы и исправления
Выпадающий список не появляется в Excel после сохранения.
Убедитесь, что InCellDropDown = true установлен на объекте Validation перед сохранением. Выпадающий список виден в Excel только когда этот флаг установлен в true и используется ValidationType.List.
Валидация позволяет значениям выходить за определённый диапазон. Валидация применяется в Excel, а не в библиотеке. Установка правил валидации не препятствует самой библиотеке записывать любые значения в ячейку. Валидация применяется, когда пользователь вводит данные в Excel.
Formula1 для проверки списка отображается как #NAME? в Excel.
Для встроенного списка, разделённого запятыми, оберните строку в экранированные кавычки: Formula1 = "\"Option1,Option2,Option3\"". Без внутренних кавычек Excel воспринимает значение как формулу ссылки на ячейку.
OperatorType.Between применяется некорректно.
Убедитесь, что Formula1 (минимум) и Formula2 (максимум) заданы как строки. Отсутствие Formula2 для Between оставляет верхнюю границу неопределённой.
Часто задаваемые вопросы
Могу ли я выполнять проверку по диапазону ячеек (например, по именованному диапазону)?
Установите Formula1 как ссылку на диапазон ячеек, например "Sheet2!$A$1:$A$10". Значения в этом диапазоне будут использоваться в качестве источника списка раскрывающихся элементов.
Предотвращает ли проверка запись недопустимых значений библиотекой?
Нет. Правила проверки данных применяются в Excel, когда пользователь вводит данные. Библиотека Aspose.Cells FOSS не применяет проверку, когда вы вызываете Cell.PutValue() программно.
Как удалить правило проверки?
Получите доступ к правилу через Worksheet.Validations[index] и используйте операции ValidationCollection для управления правилами. В качестве альтернативы создайте новую модель рабочей книги без нежелательных правил.
Каково максимальное количество валидаций на лист?
Формат XLSX поддерживает до 65,530 правил проверки на лист.