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 (a 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 za pomocą dotnet add package Aspose.Cells_FOSS.
Przewodnik krok po kroku
Krok 1: Zainstaluj pakiet
dotnet add package Aspose.Cells.FOSSKrok 2: Zaimportuj 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 na listę oddzieloną 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 liczbowego
Użyj ValidationType.Decimal z OperatorType.Between oraz Formula1/Formula2, aby ograniczyć wprowadzanie liczb.
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, przy każdym 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 ich rozwiązania
Lista rozwijana nie pojawia się w Excelu po zapisaniu. Ensure InCellDropDown = true jest ustawiony na Validation obiekt przed zapisaniem. Lista rozwijana jest widoczna w Excelu tylko wtedy, gdy ten znacznik jest true and ValidationType.List jest używany.
Walidacja dopuszcza wartości poza określonym zakresem. Walidacja jest egzekwowana przez Excel, a nie przez bibliotekę. Ustawienie reguł walidacji nie zapobiega bibliotece zapisywaniu dowolnej wartości do komórki. Walidacja jest stosowana, gdy użytkownik wprowadza dane w Excelu.
Formula1 dla walidacji listy wyświetla się jako #NAME? w Excelu. Dla listy oddzielonej przecinkami w jednej linii, otocz ciąg w escapowanych cudzysłowach: Formula1 = "\"Option1,Option2,Option3\"". Bez wewnętrznych cudzysłowów Excel traktuje wartość jako formułę odwołania do komórki.
OperatorType.Between nie działa poprawnie. Upewnij się, że oba Formula1 (minimum) i Formula2 (maximum) są ustawione jako ciągi znaków. Brakujący Formula2 for Between pozostawia górną granicę niezdefiniowaną.
Najczęściej zadawane pytania
Czy mogę walidować względem zakresu komórek (np. nazwanego zakresu)?
Ustaw Formula1 na odwołanie do zakresu komórek, np. "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ą wymuszane przez Excel, gdy użytkownik wprowadza dane. Biblioteka Aspose.Cells FOSS nie wymusza walidacji, gdy wywołujesz Cell.PutValue() programowo.
Jak usunąć regułę walidacji?
Uzyskaj dostęp do reguły za pośrednictwem Worksheet.Validations[index] i użyj operacji ValidationCollection, aby zarządzać regułami. Alternatywnie, utwórz nowy model skoroszytu bez niepożądanych reguł.
Jaka jest maksymalna liczba walidacji na arkusz?
Format XLSX obsługuje do 65,530 reguł walidacji na arkusz.