使用数据验证
使用数据验证
Aspose.Cells FOSS for C++ 支持通过 Validation 和 ValidationCollection 类向工作表添加单元格级别的数据验证规则。WorkbookValidator 类提供保存前的一致性检查。
添加验证规则
访问工作表的验证集合,并使用 ValidationCollection::Add() 添加新规则。在返回的 Validation 对象上设置类型、公式和目标区域:
#include "aspose/cells_foss/Workbook.h"
#include "aspose/cells_foss/Worksheet.h"
#include "aspose/cells_foss/ValidationCollection.h"
#include "aspose/cells_foss/Validation.h"
#include "aspose/cells_foss/CellArea.h"
using namespace Aspose::Cells_FOSS;
int main() {
Workbook workbook;
Worksheet& sheet = workbook.GetWorksheets()[0];
ValidationCollection& validations = sheet.GetValidations();
int idx = validations.Add();
Validation& v = validations[idx];
v.SetType(ValidationType::WholeNumber);
v.SetFormula1("1");
v.SetFormula2("100");
v.SetIgnoreBlank(true);
v.SetInCellDropDown(false);
v.SetInputTitle("Enter Value");
v.SetInputMessage("Value must be between 1 and 100.");
v.SetErrorTitle("Invalid Input");
v.SetErrorMessage("Value is out of range.");
v.SetShowInput(true);
v.SetShowError(true);
CellArea area = CellArea::CreateCellArea("B2", "B10");
v.AddArea(area);
workbook.Save("validated.xlsx");
return 0;
}验证类型
ValidationType 枚举定义了可以应用的约束类型:
| ValidationType | 描述 |
|---|---|
WholeNumber | 整数值约束 |
Decimal | 浮点数约束 |
List | 基于公式或范围的下拉列表 |
Date | 日期值约束 |
TextLength | 字符串长度约束 |
Custom | 基于公式的自定义规则 |
警报样式
ValidationAlertType 枚举控制验证失败时显示的行为:
| AlertStyle | Behavior |
|---|---|
Stop | 阻止输入并显示错误对话框 |
Warning | 显示警告;用户可以接受或拒绝 |
Information | 显示信息提示 |
使用 Validation::SetAlertStyle(ValidationAlertType) 设置警报样式。
在单元格中查询验证
使用 ValidationCollection::GetValidationInCell(row, col) 查找特定单元格适用的验证规则。如果没有适用的规则,则返回 nullptr。
删除验证规则
从特定单元格或范围区域中移除验证:
CellArea area = CellArea::CreateCellArea("B2", "B10");
validations.RemoveArea(area);
// Or remove a single cell:
validations.RemoveACell(1, 1); // row=1, col=1 (0-based)
保存前工作簿验证
调用 WorkbookValidator::ValidateForSave 在保存之前对工作簿模型执行一致性检查。此操作会被 Workbook::Save 自动调用,但也可以在开发期间独立触发:
WorkbookValidator validator;
validator.ValidateForSave(workbook);技巧与最佳实践
- 对于范围类型的验证,始终同时设置
SetFormula1和SetFormula2(WholeNumber、Decimal、Date),以定义下限和上限。 - 使用
SetIgnoreBlank(true)允许空单元格通过验证而不触发错误。 - 在添加新规则之前调用
ValidationCollection::AreasOverlap,以检查同一工作表上是否存在重叠的验证区域。 WorkbookValidator::ValidateForSave在保存时内部调用;在开发期间调用它以便及早发现问题。
常见问题
| 问题 | 原因 | 修复 |
|---|---|---|
| 未对单元格应用验证 | 未添加区域 | 使用目标范围调用 Validation::AddArea(area) |
| 下拉框未显示 | SetInCellDropDown(false) | 为列表验证设置 SetInCellDropDown(true) |
| 规则重叠 | 两个规则覆盖了相同的单元格 | 使用 AreasOverlap 来检测并解决冲突 |
| ValidateForSave 失败 | 模型不一致 | 在保存之前审查并修复报告的不一致之处 |
API Reference 概要
| 类/方法 | 描述 |
|---|---|
ValidationCollection::Add() | 添加新的空验证规则 |
ValidationCollection::GetValidationInCell(row, col) | 查找单元格的验证 |
ValidationCollection::RemoveArea(area) | 从范围中移除验证 |
ValidationCollection::RemoveACell(row, col) | 从单元格中移除验证 |
ValidationCollection::AreasOverlap | 检查重叠的验证区域 |
Validation::SetType(ValidationType) | 设置验证类型 |
Validation::SetFormula1(expr) | 设置下界或列表来源 |
Validation::SetFormula2(expr) | 设置上限 |
Validation::AddArea(area) | 将规则应用于范围 |
Validation::RemoveArea(area) | 从范围中删除规则 |
Validation::SetAlertStyle(style) | 设置停止/警告/信息行为 |
WorkbookValidator::ValidateForSave | 预保存一致性检查 |