Skip to content

SpreadSheetTable

SpreadSheetTable はテーブルを描画するメインコンポーネントです。

import { SpreadSheetTable } from '@heynow-jp/react-spread-sheet-table'
// 仮想スクロールあり (固定高さ)
<SpreadSheetTable table={table} height={500} />
// 仮想スクロールなし (行数に合った自然な高さ)
<SpreadSheetTable table={table} />
プロパティデフォルト説明
tableTableInstance<T>(必須)useSpreadSheetTable で生成したインスタンス
heightnumber-テーブルの高さ (px)。指定すると仮想スクロールが有効に。省略すると全行表示
readOnlybooleanfalseテーブル全体を読み取り専用に
cellMeta(row: T, columnKey: keyof T, rowIndex: number) => CellMeta | undefined-セルごとの追加スタイル・ツールチップを返すコールバック
autoWidthbooleanfalseテーブル幅をカラム幅の合計に合わせる

複数の SpreadSheetTable を同一画面で使用するとき、クリップボード範囲 (マーチングアンツ) の排他制御を行う Provider です。

あるテーブルでコピー/カットを実行すると、別テーブルのクリップボード範囲が自動的にクリアされます。Provider なしでも各テーブルは独立して動作しますが、マーチングアンツが複数テーブルに残る場合があります。

import {
ReactSpreadSheetTableProvider,
SpreadSheetTable,
useSpreadSheetTable,
} from '@heynow-jp/react-spread-sheet-table'
function App() {
const tableA = useSpreadSheetTable({ ... })
const tableB = useSpreadSheetTable({ ... })
return (
<ReactSpreadSheetTableProvider>
<SpreadSheetTable table={tableA} />
<SpreadSheetTable table={tableB} />
</ReactSpreadSheetTableProvider>
)
}

cellMeta コールバックが返すオブジェクトの型です。

type CellMeta = {
className?: string // セルに追加する CSS クラス
tooltip?: string // ホバー時のツールチップテキスト
}

バリデーションエラーのツールチップが存在する場合はそちらが優先されます。

キー動作
Arrow keysセル移動
Shift + Arrow範囲選択の拡張
Tab右のセルへ移動
Shift + Tab左のセルへ移動
Enter編集開始 / 編集確定
Escape編集キャンセル
Delete / Backspaceセル内容を削除
Spaceboolean セルのトグル
Ctrl + Cコピー
Ctrl + Vペースト
Ctrl + ZUndo
Ctrl + Shift + ZRedo
Ctrl + A全選択
操作動作
クリックセル選択
ダブルクリック編集開始
Shift + クリック範囲選択
ドラッグ範囲選択
列ヘッダークリック列全体を選択
行ヘッダークリック行全体を選択
行ヘッダードラッグ行の並び替え (reorderable 有効時)