入力規則
v1.4.0 から、セルや範囲に入力規則(データ検証)を設定できます — ドロップダウンリスト、数値・日付・時刻・文字数の比較、カスタム数式チェックに加え、任意の入力メッセージやエラーアラートを、Excel の「データの入力規則」とまったく同じように扱えます。
Note: 入力規則の作成は Pro 機能です。読み取りと強制(
getValidations・getValidationAt・validate)は Lite で動作するため、Pro で作成した — または xlsx からインポートした — ルールは無償版でも強制されます。
ルールの設定
ValidationRule を範囲・単一セル・明示的な矩形に設定します。
import { createReogrid } from '@reogrid/pro'
const grid = createReogrid({ workspace: '#app' })
const ws = grid.worksheet
// 列全体
ws.range('E2:E100').setValidation({ type: 'list', options: ['低', '中', '高'] })
// 単一セル
ws.cell('B2').setValidation({ type: 'whole', operator: 'between', value1: 1, value2: 100 })
// 明示的な矩形(r1, c1, r2, c2)
ws.setValidation(1, 3, 99, 3, { type: 'decimal', operator: 'greaterThan', value1: 0 })
ルールの削除は ws.range(...).removeValidation()、ws.removeValidation(r1, c1, r2, c2)、ws.clearValidations() で行います。
基本オプション(全ルール共通)
すべてのルールは共通の基底を継承します。
| オプション | 型 | 既定値 | 説明 |
|---|---|---|---|
ignoreBlank | boolean | true | 空入力は常に通過。 |
alertStyle | 'stop' | 'warning' | 'information' | 'stop' | 'stop' のみ書き込みをブロック。他は通知のみ。 |
showInputMessage | boolean | false | セル選択時に案内バブルを表示。 |
inputTitle / inputMessage | string | — | 案内バブルの内容。 |
showErrorMessage | boolean | true | 不正値が拒否されたときにアラートバブルを表示。 |
errorTitle / errorMessage | string | — | アラートバブルの内容。 |
ルールの種類
リスト(ドロップダウン)
インラインの options または同一シートの source 範囲・数式を指定します(両者は排他です)。
// インラインオプション
ws.range('B2:B100').setValidation({
type: 'list',
options: ['下書き', 'レビュー中', '完了'],
showInputMessage: true,
inputTitle: 'ステータス',
inputMessage: 'ドロップダウンからステータスを選択してください。',
})
// ソース範囲(使用時に解決)
ws.range('A2:A100').setValidation({
type: 'list',
source: '=$H$1:$H$5',
showDropdown: true, // ドロップダウン矢印を表示(既定 true)
})
比較(whole / decimal / date / time / textLength)
type が値の種類、operator と value1(between / notBetween では value2 も)が判定を定めます。リテラルと数式文字列の両方を受け付けます。
// 1〜100 の整数
ws.range('C2:C100').setValidation({
type: 'whole', operator: 'between', value1: 1, value2: 100,
errorMessage: '数量は 1〜100 の整数で入力してください。',
})
// 正の小数
ws.range('D2:D100').setValidation({ type: 'decimal', operator: 'greaterThan', value1: 0 })
// 本日以降の日付(通知の警告)
ws.range('E2:E100').setValidation({
type: 'date', operator: 'greaterThanOrEqual', value1: '=TODAY()',
alertStyle: 'warning', errorMessage: '期日が過去の日付です。',
})
// 文字数 5 以下
ws.range('F2:F100').setValidation({ type: 'textLength', operator: 'lessThanOrEqual', value1: 5 })
演算子:between · notBetween · equal · notEqual · greaterThan · lessThan · greaterThanOrEqual · lessThanOrEqual。
カスタム(数式)
真値を返す数式なら有効とみなされます。相対参照は範囲の左上から (row - r1, col - c1) だけオフセットされます — 条件付き書式の式ルールと同じ相対参照の意味です。
// G2:G100 は左隣の値より大きくなければならない
ws.range('G2:G100').setValidation({
type: 'custom',
formula: '=G2>F2',
errorMessage: '前の列の値より大きくしてください。',
})
any
{ type: 'any' } は入力の案内を残したまま実効ルールを解除します — 入力を制限せずにヒントだけ表示したいときに便利です。
アラートスタイル
不正入力を実際にブロックするのは alertStyle: 'stop'(既定)だけです。'warning' と 'information' はメッセージを表示しつつ値を通過させます — 強制ではなく誘導したいときに選びます。
読み取りと検証(Lite で読み取り可)
ws.getValidations() // ValidationEntry[]
ws.getValidationAt(row, col) // セルを覆うルール、または null
ws.validate() // 現在の値に対する検証結果を返す
これらは Lite で動作し、Pro で作成したルールは Lite でも強制されます。
xlsx への往復
ルールは <dataValidations> にシリアライズされ、xlsx と ReoGrid JSON の両方で往復するため、検証付きワークブックは Excel との往復でルールを保持します。