Как работать с проверкой данных в .NET

Как работать с проверкой данных в .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 правил проверки на лист.

См. также

 Русский