如何在 .NET 中使用数据验证

如何在 .NET 中使用数据验证

Aspose.Cells FOSS for .NET 使您能够通过 Worksheet.Validations(一种 ValidationCollection)向单元格范围添加数据验证规则。调用 Add(CellArea) 创建 Validation 对象,并使用 ValidationType 设置其 Type。支持的类型包括 ListDecimalCustom。使用 dotnet add package Aspose.Cells_FOSS 进行安装。

分步指南

步骤 1:安装软件包

dotnet add package Aspose.Cells_FOSS

步骤 2:导入命名空间

using Aspose.Cells_FOSS;

步骤 3:添加列表下拉验证

创建一个 CellArea,使用 CellArea.CreateCellArea(),将其添加到 Worksheet.Validations,并在 Formula1 中使用逗号分隔的列表设置 ValidationType.List

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.DecimalOperatorType.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 中未出现。
确保在保存之前在 Validation 对象上设置 InCellDropDown = true。只有当此标志为 true 且使用 ValidationType.List 时,下拉列表才在 Excel 中可见。

验证允许超出定义范围的值。
验证由 Excel 强制执行,而不是由库执行。设置验证规则并不会阻止库本身向单元格写入任何值。验证在用户在 Excel 中输入数据时才会生效。

Formula1 用于列表验证时在 Excel 中显示为 #NAME? 对于内联逗号分隔的列表,请将字符串用转义引号括起来:Formula1 = "\"Option1,Option2,Option3\""。如果没有内部引号,Excel 会将该值视为单元格引用公式。

OperatorType.Between 未正确应用。
确保 Formula1(最小)和 Formula2(最大)均设置为字符串。缺少 Formula2 用于 Between 会导致上限未定义。

常见问题

我可以针对单元格范围(例如命名范围)进行验证吗?

Formula1 设置为单元格范围引用,例如 "Sheet2!$A$1:$A$10"。该范围内的值将用作下拉列表的来源。

验证是否阻止库写入无效值?

不。 当用户输入数据时,Excel 会强制执行验证规则。 以编程方式调用 Cell.PutValue() 时,Aspose.Cells FOSS 库不会强制执行验证。

我该如何删除验证规则?

通过 Worksheet.Validations[index] 访问规则,并使用 ValidationCollection 操作来管理规则。或者,创建一个不包含不需要的规则的新工作簿模型。

每个工作表的最大验证数量是多少?

XLSX 格式每个工作表最多支持 65,530 条验证规则。

另请参阅

 中文