如何在 .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 中。 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 强制执行。当你以编程方式调用 Cell.PutValue() 时,Aspose.Cells 开源库并不强制执行验证。
我该如何删除验证规则?
通过 Worksheet.Validations[index] 访问该规则,并使用 ValidationCollection 操作来管理规则。或者,创建一个不包含不需要规则的新工作簿模型。
每个工作表的验证规则最大数量是多少?
XLSX 格式每个工作表支持最多 65,530 条验证规则。