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または互換リーダーによって適用されます。ライブラリは、プログラムで値を設定した際に実行時に検証制約を評価しません。