Jak pracować z walidacją danych w .NET
Aspose.Cells FOSS for .NET umożliwia dodawanie reguł walidacji danych do zakresów komórek za pomocą Worksheet.Validations (ValidationCollection). Wywołaj Add(CellArea), aby utworzyć obiekt Validation i ustawić jego Type przy użyciu ValidationType. Obsługiwane typy to List, Decimal i Custom. Zainstaluj przy pomocy dotnet add package Aspose.Cells_FOSS.
Przewodnik krok po kroku
Krok 1: Zainstaluj pakiet
dotnet add package Aspose.Cells_FOSSKrok 2: Importuj przestrzeń nazw
using Aspose.Cells_FOSS;Krok 3: Dodaj walidację listy rozwijanej
Utwórz CellArea z CellArea.CreateCellArea(), dodaj go do Worksheet.Validations i ustaw ValidationType.List przy pomocy listy oddzielonej przecinkami w 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.");Krok 4: Dodaj walidację zakresu numerycznego
Użyj ValidationType.Decimal z OperatorType.Between i Formula1/Formula2, aby ograniczyć dane liczbowe.
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.");Krok 5: Połącz wiele walidacji na tym samym arkuszu
Możesz dodać dowolną liczbę walidacji do tego samego arkusza, wywołując Validations.Add() wielokrotnie, każda z nich z innym 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.");Typowe problemy i rozwiązania
Lista rozwijana nie pojawia się w Excelu po zapisaniu.
Upewnij się, że InCellDropDown = true jest ustawiony na obiekcie Validation przed zapisem. Lista rozwijana jest widoczna w Excelu tylko wtedy, gdy ten znacznik jest true i używany jest ValidationType.List.
Walidacja pozwala na wartości poza określonym zakresem.
Walidacja jest wymuszana przez Excel, a nie przez bibliotekę. Ustawianie reguł walidacji nie zapobiega samej bibliotece zapisywania dowolnej wartości w komórce. Walidacja jest stosowana, gdy użytkownik wprowadza dane w Excelu.
Formula1 dla walidacji listy wyświetla się jako #NAME? w Excelu.
Aby użyć listy oddzielonej przecinkami w jednej linii, otocz ciąg znaków znakami cudzysłowu z escape: Formula1 = "\"Option1,Option2,Option3\"". Bez wewnętrznych cudzysłowów Excel traktuje wartość jako formułę odwołania do komórki.
OperatorType.Between nie stosuje się prawidłowo.
Upewnij się, że zarówno Formula1 (minimum), jak i Formula2 (maksimum) są ustawione jako ciągi znaków. Brak Formula2 dla Between pozostawia górną granicę niezdefiniowaną.
Najczęściej zadawane pytania
Czy mogę zweryfikować względem zakresu komórek (np. nazwanego zakresu)?
Ustaw Formula1 na odwołanie do zakresu komórek, takie jak "Sheet2!$A$1:$A$10". Wartości w tym zakresie będą użyte jako źródło listy rozwijanej.
Czy walidacja zapobiega bibliotece przed zapisywaniem nieprawidłowych wartości?
Nie. Reguły walidacji są egzekwowane przez Excel, gdy użytkownik wprowadza dane. Biblioteka Aspose.Cells FOSS nie egzekwuje walidacji, gdy wywołujesz Cell.PutValue() programowo.
Jak usunąć regułę walidacji?
Uzyskaj dostęp do reguły poprzez Worksheet.Validations[index] i użyj operacji ValidationCollection do zarządzania regułami. Alternatywnie, utwórz nowy model skoroszytu bez niechcianych reguł.
Jaka jest maksymalna liczba walidacji na arkusz?
Format XLSX obsługuje do 65,530 reguł walidacji na arkusz.