データ検証の操作
データ検証の操作
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);ヒントとベストプラクティス
- 範囲タイプのバリデーション(
WholeNumber,Decimal,Date)では、下限と上限を定義するために、SetFormula1とSetFormula2の両方を必ず設定してください。 - 空のセルがエラーを起こさずにバリデーションを通過できるように、
SetIgnoreBlank(true)を使用します。 - 同じシート上で重複するバリデーション領域がないか確認するために、新しいルールを追加する前に
ValidationCollection::AreasOverlapを呼び出してください。 WorkbookValidator::ValidateForSaveは保存時に内部的に呼び出されます。開発中にそれを呼び出して、問題を早期に検出しましょう。
一般的な問題
| 問題 | 原因 | 修正 |
|---|---|---|
| セルに検証が適用されていません | 領域が追加されていません | 対象範囲で Validation::AddArea(area) を呼び出す |
| ドロップダウンが表示されません | SetInCellDropDown(false) | リスト検証にSetInCellDropDown(true)を設定します |
| ルールが重複しています | 2つのルールが同じセルをカバーしています | 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 | 保存前の整合性チェック |