如何在 C++ 中向电子表格添加数据验证

如何在 C++ 中向电子表格添加数据验证

Aspose.Cells FOSS for C++ 支持单元格级别的数据验证规则,这些规则限制用户在特定单元格或范围内可以输入的值。Validation、ValidationCollection 和 WorkbookValidator 类构成验证 API。

分步指南

步骤 1:设置构建

cmake_minimum_required(VERSION 3.15)
project(DataValidation CXX)
set(CMAKE_CXX_STANDARD 17)

add_subdirectory(path/to/Aspose.Cells-FOSS-for-Cpp)
add_executable(DataValidation main.cpp)
target_link_libraries(DataValidation PRIVATE Aspose.Cells.Foss.Cpp)

步骤 2:包含必需的头文件

#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;

步骤 3:访问验证集合

从工作表中检索 ValidationCollection:

int main() {
    Workbook workbook;
    Worksheet& sheet = workbook.GetWorksheets()[0];
    ValidationCollection& validations = sheet.GetValidations();
    return 0;
}

步骤 4:添加验证规则

调用 ValidationCollection::Add() 并配置返回的 Validation 对象:

int idx = validations.Add();
Validation& v = validations[idx];

v.SetType(ValidationType::WholeNumber);
v.SetFormula1("1");
v.SetFormula2("100");
v.SetIgnoreBlank(true);
v.SetInputTitle("Enter Quantity");
v.SetInputMessage("Enter a whole number between 1 and 100.");
v.SetErrorTitle("Invalid Input");
v.SetErrorMessage("Value must be between 1 and 100.");
v.SetShowInput(true);
v.SetShowError(true);
v.SetAlertStyle(ValidationAlertType::Stop);

步骤 5:将规则应用于范围

使用 Validation::AddArea 将验证附加到 CellArea:

CellArea area = CellArea::CreateCellArea("B2", "B20");
v.AddArea(area);

步骤 6:保存工作簿

workbook.Save("validated.xlsx");
workbook.Dispose();

步骤 7:运行保存前验证(可选)

在开发期间调用 WorkbookValidator::ValidateForSave 以在保存前捕获模型问题:

WorkbookValidator validator;
validator.ValidateForSave(workbook);
workbook.Save("validated.xlsx");

常见问题及解决方案

已保存的文件中看不到验证 Ensure Validation::AddArea(area) 在配置规则后调用。没有关联区域的规则不会被序列化。

下拉列表未显示 设置 v.SetInCellDropDown(true) 并设置 v.SetType(ValidationType::List) with SetFormula1 指向范围或逗号分隔的值。

重叠的验证区域 使用 ValidationCollection::AreasOverlap 在添加新规则之前检查冲突。规则重叠可能导致 Excel 中出现意外行为。

输入消息未显示 确保两者 SetShowInput(true) and SetInputMessage("...") 已设置。空的消息字符串会抑制输入提示,即使 SetShowInput(true) 被调用。

ValidateForSave 报告错误 检查报告的不一致性。常见原因包括范围类型验证缺少公式边界以及单元格区域坐标无效。

常见问答

支持哪些验证类型?

The ValidationType 枚举包括:WholeNumber、Decimal、List、Date、TextLength、Custom和Any。

我可以从范围中删除验证规则吗?

是的。使用 ValidationCollection::RemoveArea(area) 从范围中删除规则,或使用 RemoveACell(row, col) 对单个单元格进行操作。

我可以将相同的验证规则应用于多个范围吗?

是的。在同一个 Validation 对象上多次调用 Validation::AddArea(area),即可将其应用于其他范围。

有哪些可用的警报样式?

ValidationAlertType 包括:Stop(阻止无效输入),Warning(警告但允许输入),以及 Information(仅信息提示)。

验证是在运行时生效,还是仅在 Excel 中生效?

数据验证规则存储在 XLSX 文件中,并由 Excel 或兼容的阅读器强制执行。库在以编程方式设置值时不会在运行时评估验证约束。

另请参阅

 中文