如何在 .NET 中使用数据验证
Aspose.Cells FOSS for .NET 使您能够通过 Worksheet.Validations(一种 ValidationCollection)向单元格范围添加数据验证规则。调用 Add(CellArea) 创建 Validation 对象,并使用 ValidationType 设置其 Type。支持的类型包括 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,并在 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.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 中未出现。
确保在保存之前在 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 条验证规则。