使用数据验证

使用数据验证

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 枚举控制验证失败时显示的行为:

AlertStyleBehavior
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预保存一致性检查

另请参阅

 中文