GrapeCity.devlog

グレープシティ株式会社のDeveloper Tools〈開発支援ツール〉の最新情報をお届けします。製品のTIPSや発売情報、イベントのお知らせなどをいち早く発信中です。

Excelの「データの入力規則」はSPREADでも使える

Excelにおいて、データの入力規則(検証機能)を使用してユーザーがセルに入力できるデータの種類または値を制限する、という使い方は非常に一般的です。

ExcelライクなUIの業務アプリ開発に適した製品「SPREAD for Windows Forms」では、Excelさながらのデータの入力規則だけでなく、InputManと互換の14種類の検証機能も使用することができるので、様々なデータ検証の要件に柔軟に対応できます。

今回はこれらの設定方法について簡単に説明していきたい思います。

Excelライクに「データの入力規則」を設定する

まずはExcelの「データの入力規則」のように入力データの検証を行う方法です。SPREADデザイナに新たに追加された「データ検証」のメニューから設定します。

f:id:GrapeCity_dev:20180828170141p:plain

Excelの「データの入力規則」ダイアログとほぼ同一のUIの「データ検証」ダイアログが表示されます。なぜ「データの入力規則」というメニュー名じゃないのか疑問が湧くくらい同じUIです。

f:id:GrapeCity_dev:20180828113159p:plain:w450

使い方もExcelと同様です。次の例では入力データを0~99999の数値に制限します。

f:id:GrapeCity_dev:20180828170214p:plain:w450

「エラーメッセージ」タブから、範囲外のデータが入力された場合はエラーダイアログを表示するように設定追加します。

f:id:GrapeCity_dev:20180828170233p:plain:w450

アプリケーションを実行し、範囲外の値(以下の例では"100000")を入力するとエラーメッセージが表示され、入力データを制限することができました。

f:id:GrapeCity_dev:20180828114543p:plain

同様の設定をコードから行うことも可能です。

サンプルコード(C#)

// 4~7列目の項目の入力データを0~99999に制限する
GrapeCity.Spreadsheet.DataValidation dv = 
    fpSpread1.Sheets[0].Validations.Add(
        new GrapeCity.CalcEngine.RangeReference(0, 3, fpSpread1.Sheets[0].RowCount, 6),
            GrapeCity.Spreadsheet.DataValidationType.WholeNumber, 
            GrapeCity.Spreadsheet.DataValidationErrorStyle.Stop,
            GrapeCity.Spreadsheet.DataValidationOperator.Between, "0", "99999");
dv.ShowError = true;
dv.ErrorTitle = "無効な入力データです。";
dv.ErrorMessage = "0~99999の数値を入力してください。";
dv.IgnoreBlank = true;

InputManと互換の14種類の検証機能(セルバリデータ)で入力規則を設定する

InputManの入力データの検証機能と互換性のある検証機能、「セルバリデータ」をSPREADでも用することができます。ここでいうバリデータ(Validator)とは検証ツール(機能)のことを意味します。

このセルバリデータは、多段明細グリッドコンポーネントのMultiRowにも搭載されていますが、それと同等のものが実装されたことになります。

なのでInputManやMultiRowを使用したことのあるユーザーや、一緒に使用しているユーザーは、同様の方法で検証機能を実装できるので効率が良いです。

但し、SPREADやMultiRowの場合は「組み込みセルバリデータ」、InputManは「検証アイテム」という形式での提供になるので、機能の名称が異なる場合もありますが、できることや使い勝手はほぼ同じです。

それぞれの機能の比較を表にまとめると以下のようになります。

検証対象 機能名
InputMan SPREAD/MultiRow
必須入力 EmptyText RequiredFieldValidator
InvalidType RequiredTypeValidator
必須リスト IncludeList IncludeListValidator
除外リスト ExcludeList ExcludeListValidator
サロゲート文字 SurrogateChar SurrogateCharValidator
正規表現 RegularExpression RegularExpressionValidator
対になる文字 InvalidPairChar PairCharValidator
数値範囲 InvalidNumberRange RangeValidator
日付範囲 InvalidDateTimeRange
コントロールまたは
セルの数値の比較
NumberCompareControl CompareCellValidator
コントロールまたは
セルの日付値の比較
DateTimeCompareControl
数値の比較 NumberCompareValue CompareValueValidator
日付値の比較 DateTimeCompareValue
書式 CharFormat CharFormatValidator
文字列の比較 CompareString CompareStringValidator
文字列の長さ TextLength TextLengthValidator
エンコード形式 EncodingCheck EncodingValidator

RangeValidatorCompareCellValidatorCompareValueValidatorについては、数値と日付値で共通のバリデータを使用します。(RequiredTypeプロパティで検証対象のデータ型を指定します。)

SPREADデザイナからセルバリデータを設定するには、「データ検証」->「セルバリデータ」のメニューを選択します。

f:id:GrapeCity_dev:20180828174424p:plain

「CellValidator コレクションエディタ」が表示されるので。セルバリデータを追加します。今回の例では入力データを全角文字に制限するよう、CharFormatValidatorを選択し、「追加」クリックします。

f:id:GrapeCity_dev:20180829104045p:plain:w450

Formatプロパティに入力可能な文字種を指定するためのキーワードを設定します。全角文字を指定する場合は全角でを設定します。使用できるキーワードは、InputManセルの書式に設定できるものと同様です。

f:id:GrapeCity_dev:20180829120533p:plain:w450

次に不正な値が入力された場合の通知の設定を行います。Actionsプロパティ右側の「...」のアイコンをクリックします。

f:id:GrapeCity_dev:20180829120542p:plain:w450

「ValidateActionBase コレクションエディタ」が開くので、通知方法を指定します。今回はデータの不正をアイコンで通知するようIconNotifyを選択し、追加します。

f:id:GrapeCity_dev:20180830171840p:plain:w450

セルの編集終了時に通知が行われるよう、以下のようにプロパティを設定します。

プロパティ名設定値
DoActionReasonEndEdit
IconTip全角文字で入力してください。

f:id:GrapeCity_dev:20180830171755p:plain:w450

以上で設定は完了です。デザイナで変更を適用したあと、アプリケーションを実行し、セルに全角以外の文字を入力すると、アイコンでエラー通知が表示されます。またアイコンにカーソルをあわせればエラー情報がツールチップで表示されます。

f:id:GrapeCity_dev:20180830173612g:plain

こちらもすべての設定をコードから行うことも可能です。

サンプルコード(C#)

// 2~3列目の項目の入力データを全角文字に制限し、エラー時はアイコンで通知する。
FarPoint.Win.Spread.CharFormatValidator formatValidator =
    new FarPoint.Win.Spread.CharFormatValidator();
formatValidator.Format = "Z";
FarPoint.Win.Spread.IconNotify iconNotify =
    new FarPoint.Win.Spread.IconNotify();
iconNotify.DoActionReason = FarPoint.Win.Spread.ValidateReasons.EndEdit;
iconNotify.IconTip = "全角で入力してください。";

formatValidator.Actions.Add(iconNotify);
fpSpread1.Sheets[0].AddValidators(
    new FarPoint.Win.Spread.Model.CellRange(
        0, 1, fpSpread1.Sheets[0].RowCount, 2), formatValidator);

おわりに

いかがでしたでしょうか。Excel互換の設定方法は、Excelとほぼ同じ使い勝手で入力規則を設定できるので慣れている方には嬉しいですね。

また、セルバリデータを使用した設定方法も手順こそは多いですが、Excelでは複雑な数式を設定しないといけないような制御も、ダイアログからプロパティを設定するだけで比較的簡単に行うことができます。

製品Webサイトでは、SPREADの基本機能を体感できるデモアプリケーションを公開しています。今回紹介したデータ検証の機能も含まれていますので、ぜひダウンロードしてお試しください。