ReoGrid ReoGrid Web

マルチシートワークブック

v1.3.0 から、ReoGrid インスタンスは N 枚のワークシートと 1 枚のアクティブシートからなる ワークブック になりました。コアがシートタブバー(追加・名前変更・ドラッグ並べ替え・非表示・タブ色)を描画し、各シートが独自のデータ・選択・スクロール・固定・Undo 履歴を保持します。数式は =Sheet1!A1 のように他シートのセルを参照できます。

マルチシートは Lite / Pro 両対応です。ティアガードと行・列制限はシートごとに適用されます。

シングルシートから移行する場合は? 既存のコードはそのまま動作します — 新規グリッドは今も 1 枚のシートで始まります。唯一の見た目の違いは、下部に表示される高さ約 28 px のシートタブバーです。非表示にするには createReogrid({ showSheetTabs: false }) を渡してください。

ワークブックの作成

インスタンスは workbook コーディネーターを公開します。最初のシートは自動生成され、addSheet で追加できます。

import { createReogrid } from '@reogrid/lite'

const grid = createReogrid({
  workspace: '#app',
  initialSheetName: 'Sales',   // 省略可 — 既定は 'Sheet1'
})

// シートを追加
const expenses = grid.workbook.addSheet('Expenses').worksheet
const summary  = grid.workbook.addSheet('Summary').worksheet

// アクティブシートは常に grid.worksheet で取得できます
grid.worksheet.cell('A1').setValue('Q1 report')

addSheet(name?, index?)WorkbookSheet{ worksheet, actionManager })を返します。.worksheet を使えば、シングルシートのグリッドとまったく同じようにセルを読み書きできます。

ワークブックオプション

オプション既定値説明
showSheetTabsbooleantrueグリッド下部のシートタブバーを表示します。
initialSheetNamestring'Sheet1'初期化時に作成されるシートの名前。

ワークブックコーディネーター

grid.workbook がシート集合とアクティブ選択を管理します。

const wb = grid.workbook

wb.addSheet('Data')            // シートを追加(インデックス指定も可)
wb.renameSheet(1, 'Archive')   // 名前はサニタイズ&重複回避されます
wb.moveSheet(2, 0)             // 並べ替え(アクティブシートは維持)
wb.setActiveSheet(0)          // アクティブシートを切り替え
wb.removeSheet(1)             // 最後の 1 枚は削除できません

wb.getSheets()                // タブ順の WorkbookSheet[]
wb.getWorksheets()            // Worksheet オブジェクト
wb.getSheetNames()            // ['Sales', 'Archive', ...]
メソッド説明
addSheet(name?, index?)シートを追加し、新しい WorkbookSheet を返します。
removeSheet(index)シートを削除(最後の 1 枚は不可)。
renameSheet(index, name)名前変更。全シートの参照式が書き換わります。
moveSheet(from, to)タブの並べ替え。
setActiveSheet(index)シートをアクティブにします。
getSheets() / getWorksheets() / getSheetNames()ワークブックを問い合わせます。
setSheetHidden(index, hidden)シートの表示/非表示。
setSheetTabColor(index, color)タブ色の設定/解除(CSS カラー文字列)。

ワークブック全体の入出力

インスタンスの I/O メソッドはシートを対象にします。(ワークシート単位の worksheet.loadXlsx() はアクティブシートにのみ読み込みます。)

// ワークブック全体を .xlsx へエクスポート(ダウンロードが起動)
grid.saveAsXlsx({ filename: 'report.xlsx' })

// File / URL / ArrayBuffer から全シートを読み込み
await grid.loadFromFile(file)
await grid.loadFromUrl('/data/book.xlsx')
await grid.loadXlsx(arrayBuffer)

// JSON シリアライズ(全シート+ビュー状態を往復)
const doc = grid.toJson()
grid.loadJson(doc)

ワークブックのビュー状態は xlsx を往復します:アクティブシート、シートごとの非表示状態、タブ色がエクスポート時に書き出され、読み込み時に復元されます(ReoGrid-JSON はシートごとの showGridlines も保持します)。

シート変更への反応

grid.workbook.onActiveSheetChange((index) => {
  console.log('アクティブシート:', index)
})

grid.workbook.onSheetsChange(() => {
  // 追加・削除・名前変更・移動・メタデータ変更で発火
  console.log('タブ:', grid.workbook.getSheetNames())
})

各購読呼び出しは解除関数を返します。

インスタンスレベルイベントはアクティブシートに追従

インスタンスで一度だけ購読すれば、リスナーはアクティブなシートへ自動的に張り替わります — タブ切り替え時の再バインドは不要です。

grid.onSelectionChange((range) => { /* アクティブシートの選択 */ })
grid.onCellValueChange(({ row, column, value }) => { /* ... */ })

利用可能:onSelectionChangeonCellValueChangeonBulkCellsChangeonScrollChangeonViewportSizeChangeonStructureChangeonContextMenu。ペイロードの形は 選択とイベント を参照してください。

クロスシート数式

数式は他シートのセルを参照できます — =Sheet1!A1='My Sheet'!A1:B2=シート1!A1 のような非 ASCII 名も可。シート名を変更すると参照式が書き換わり、シートを削除すると参照は #REF! になります。詳細とライフサイクル規則は 数式エンジン — クロスシート参照 を参照してください。

// サマリーシートで 3 つの拠点シートを集計:
summary.cell('B2').value = "='Tokyo'!E6"
summary.cell('B3').value = "='Osaka'!E6"
summary.cell('B4').value = "='Nagoya'!E6"
summary.cell('B5').value = '=SUM(B2:B4)'

React・Vue

どちらのラッパーもインスタンス経由でワークブックを公開し、シートイベントを発行します。

// React
<Reogrid
  onReady={(grid) => grid.workbook.addSheet('Data')}
  onActiveSheetChange={(index) => console.log('active', index)}
  onSheetsChange={() => console.log('sheets changed')}
/>
<!-- Vue -->
<Reogrid
  @ready="grid => grid.workbook.addSheet('Data')"
  @active-sheet-change="index => console.log('active', index)"
  @sheets-change="() => console.log('sheets changed')"
/>

ライブデモ

マルチシートワークブックのデモ をご覧ください — 3 つの拠点シートと、クロスシート数式だけで構築したサマリーシート。どの拠点を編集しても、合計がシートをまたいで再計算されます。

ニュースレター

開発の最新情報をお届けします

新しいリリース・機能追加・お知らせをいち早く受け取るには、
メーリングリストにご登録ください。