Как работать с проверкой данных в .NET
Aspose.Cells FOSS для .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 после сохранения. Ensure InCellDropDown = true устанавливается на Validation объекте перед сохранением. Выпадающий список виден в Excel только когда этот флаг true and ValidationType.List используется.
Проверка допускает значения, выходящие за определённый диапазон. Проверка выполняется Excel, а не библиотекой. Установка правил проверки не мешает самой библиотеке записывать любые значения в ячейку. Проверка применяется, когда пользователь вводит данные в Excel.
Formula1 для проверки списка отображается как #NAME? в Excel. Для встроенного списка, разделённого запятыми, оберните строку в экранированные кавычки: Formula1 = "\"Option1,Option2,Option3\"". Без внутренних кавычек Excel воспринимает значение как формулу ссылки на ячейку.
OperatorType.Between не применяется правильно. Убедитесь, что оба Formula1 (minimum) и Formula2 (maximum) заданы как строки. Отсутствие Formula2 for Between оставляет верхнюю границу неопределённой.
Часто задаваемые вопросы
Могу ли я выполнять проверку относительно диапазона ячеек (например, именованного диапазона)?
Установите Formula1 на ссылку диапазона ячеек, например "Sheet2!$A$1:$A$10". Значения в этом диапазоне будут использоваться в качестве источника раскрывающегося списка.
Предотвращает ли валидация запись библиотекой недопустимых значений?
Нет. Правила валидации применяются в Excel, когда пользователь вводит данные. Aspose.Cells библиотека с открытым исходным кодом не применяет валидацию, когда вы вызываете Cell.PutValue() программно.
Как удалить правило проверки?
Получите доступ к правилу через Worksheet.Validations[index] и используйте операции ValidationCollection для управления правилами. Альтернативно, создайте новую модель рабочей книги без нежелательных правил.
Каково максимальное количество правил проверки на листе?
Формат XLSX поддерживает до 65,530 правил проверки на листе.