ReoGrid Web は、Excel グレードの編集体験 — 数式エンジン、xlsx I/O、Canvas レンダラー — をすべて単一の依存ゼロパッケージにまとめた JavaScript/TypeScript 製スプレッドシートライブラリです。React/Vue 用のラッパーと無料の Lite ティアを npm で提供しています。
v1.4 は、グリッドの役割そのものを変えるリリースです。これまでは編集の場でしたが、v1.4 でグリッドは帳票・レポートのためのツールになりました — ページをレイアウトし、Excel スタイルの改ページプレビューでページ割りを確認し、印刷そのままの PDF をブラウザだけで出力できます。サーバー往復も外部 PDF ライブラリも不要です。この目玉の土台には、Excel グレードのデータ機能が揃いました:ピボットテーブル、テーブルスタイル(テーブルとして書式設定)、データの入力規則、レポートバインディング(テンプレート明細繰り返し)、セルコメント(メモ)、名前付き範囲。加えて、日本語帳票(発注書・請求書)向けの xlsx インポート忠実度の改善も多数取り込みました。
すべて追加的な変更で、公開 API に破壊的変更はありません。ページレイアウト、PDF エクスポート、ピボット、テーブルスタイル、入力規則、レポートバインディング、コメントは Pro 機能ですが、それぞれの読み込み側(および名前付き範囲の読み込み一式)は Lite でも動作します。Pro で作成したドキュメントは Lite ビューアでも描画・往復できます。
印刷そのままの PDF を、ブラウザでレイアウト
本リリースの目玉です。ワークシートが Excel スタイルの印刷設定モデル(用紙サイズ・向き・余白・倍率・ページ順)を持つようになり、改ページプレビューが自動の改ページを青い破線、手動/端の改ページを実線で描画します。改ページはドラッグで移動でき、手動での挿入も可能です。
PDF エクスポートは自社のオリジナルエンジンが生成します。usePageBreaks: true を指定すると、用紙サイズ・向き・余白・倍率・計算済みのページ帯がすべてワークシートの印刷設定から取得され、PDF が画面上のプレビューと同一のページ割りで出力されます。options.font には glyf TrueType フォントを渡します。ブラウザ用ヘルパー loadDefaultJapaneseFont() が Noto Sans JP を一度だけ取得し(以降は Cache Storage から配信)、CJK テキストを正しく埋め込みます。
import { createReogrid, loadDefaultJapaneseFont } from '@reogrid/pro';
const grid = createReogrid({ workspace: '#app' });
const sheet = grid.worksheet;
// 1. Excel のようにページをレイアウト — A4 縦、余白 12mm、倍率 100%。
sheet.setPrintSettings({
paperSize: 'A4',
orientation: 'portrait',
margins: { top: 12, right: 12, bottom: 12, left: 12 },
scale: 1,
});
// 2. 改ページプレビューを表示し、合計行の手前に手動改ページを固定。
sheet.setShowPageBreaks(true);
sheet.insertRowPageBreak(40);
// 3. プレビューと同一のページ割りで、印刷そのままの PDF を出力。
const font = await loadDefaultJapaneseFont();
grid.saveAsPdf({ font, usePageBreaks: true, filename: 'purchase-order.pdf' });
ページ割りレンダラーはセル背景、テキスト(配置・オーバーフロー・折り返し・交互行カラー・擬似ボールド)、グリッド線、罫線、結合セルの罫線、埋め込み画像、リッチテキストを描画します — 画面と同じ忠実度です。ダウンロードではなく生バイトが必要なら、grid.exportPdf(options) が Uint8Array を返します。さらに loadFromFile / loadFromUrl が読み込み元の名前を記録するため、saveAsPdf のファイル名は読み込んだドキュメント名を既定にします(purchase-order.xlsx → purchase-order.pdf)。
これこそ ReoGrid を帳票業務 — 請求書・発注書・納品書など、紙面上のレイアウトそのものが成果物になる場面 — に適した存在にする機能です。PDF・印刷のドキュメントと PDF 印刷デモをご覧ください。
ピボットテーブル
ソース範囲から計算し、結果をグリッドに書き戻す API 駆動のライブピボットです。行・列・値・集計(sum / count / average / max / min ほか)を宣言すると、createPivot が update / refresh / remove 可能なハンドルを返します。
const pivot = sheet.createPivot({
source: { row: 0, col: 0, rows: 201, columns: 5 }, // ヘッダー行 + データ 200 行、列 A:E
anchor: { row: 0, column: 6 },
rows: [{ field: 'Region' }],
columns: [{ field: 'Product' }],
values: [{ field: 'Sales', agg: 'sum', numberFormat: '#,##0' }],
});
pivot.refresh(); // ソースを編集したら再計算
注意点が 1 つ:保存された範囲は行・列の挿入/削除でシフトしないため、構造編集の後は pivot.refresh()(または worksheet.refreshPivot(id))を呼んでください。ピボットテーブルのドキュメントとピボットデモをどうぞ。
テーブルスタイル — テーブルとして書式設定
Excel 組み込みのテーブルスタイルをライブオーバーレイとして適用します — 行を挿入/削除すると縞模様が自動で再配置され、実際の xl/tables/*.xml を往復します。範囲に対する addTable、または流暢な formatAsTable を使います:
sheet.range('A1:E15').formatAsTable({
style: 'TableStyleMedium9',
showRowStripes: true,
});
スタイル名は OOXML 組み込み(TableStyleLight1..21、TableStyleMedium1..28、TableStyleDark1..11)で、getTable / getTables は Lite で読み込めます。テーブルスタイルのドキュメントとテーブルスタイルデモをご覧ください。
データの入力規則
セルや範囲に入力規則を付与できます:ドロップダウンのリスト、whole / decimal / date / time / textLength の比較、custom 数式ルール — いずれも stop / warning / information アラート付き(入力を止めるのは stop のみ)。リストルールはドロップダウンを自動描画します。
// 明示的なリストからのドロップダウン。
sheet.range('B2:B100').setValidation({
type: 'list',
options: ['低', '中', '高'],
});
// 整数 1〜100、それ以外はブロック。
sheet.range('C2:C100').setValidation({
type: 'whole',
operator: 'between',
value1: 1,
value2: 100,
errorMessage: '数量は 1〜100 の整数で入力してください。',
});
ルールは xlsx の <dataValidations> 要素と JSON を往復し、Pro で作成したルールは getValidations() / validate() により Lite でも判定されます。入力規則のドキュメントをご覧ください。
レポートバインディング — テンプレート明細繰り返し
帳票を {{token}} セルで一度だけ設計し、ヘッダー/明細(×N)/フッターのセクションに分割してから、データをバインドしてその場に展開します。ヘッダー/フッターのトークンはトップレベルのフィールドを読み、各 detail セクションはその source が指す配列の分だけ繰り返されます。行ごとの数式は相対シフトし、フッターの集計は展開後の範囲へ拡張され、pageBreakEvery: N は N レコードごとに手動改ページを固定します — 定型帳票に最適です。
sheet.defineReportTemplate({
columns: [0, 4],
sections: [
{ role: 'header', rows: [0, 5] },
{ role: 'detail', rows: [6, 6], source: 'items', pageBreakEvery: 8 },
{ role: 'footer', rows: [7, 9] },
],
});
sheet.bindReport({
invoiceNo: 'INV-2026-0042',
date: '2026-06-18',
customer: { name: '株式会社サンプル' },
items: [
{ name: 'Webサイト制作', qty: 1, price: 350000 },
{ name: '保守サポート(月額)', qty: 12, price: 30000 },
],
});
unbindReport() でテンプレート表示に戻せます。これを saveAsPdf と組み合わせれば、ブラウザ側で完結する請求書・帳票のパイプラインになります。レポートバインディングのドキュメントをご覧ください。
セルコメント — メモ
クラシックな Excel コメントを、セルごとに 1 件、赤い角マーカーとホバーの吹き出しで表示します:
sheet.cell('C1').setComment('税抜きの単価です。', { author: '経理' });
書き込みは setComment / removeComment / clearComments / setCommentVisible、読み込みは Lite の getComment / getComments / hasComment。コメントは JSON を往復し、xlsx からは読み込みに対応します(VML 書き込みは保留)。セルコメントのドキュメントをご覧ください。
名前付き範囲
範囲に名前を付けて数式で使えます — ワークブックまたはシートスコープで、カスケード再計算と xlsx <definedNames> / JSON 往復に対応します:
grid.defineName('Sales', 'A2:A100');
grid.defineName('TaxRate', 'Settings!$B$1');
sheet.cell('C1').value = '=SUM(Sales) * TaxRate';
書き込み側(defineName / removeName)は Pro 限定ですが、読み込みとインポート(getName / getNames)は Lite でも動作します。名前付き範囲のドキュメントをご覧ください。
日本語帳票向けに、より正確な xlsx インポート
本リリースには、実際の発注書・請求書ファイルを狙った忠実度の改善が揃いました:ロケール予約の日付書式(numFmtId 27–36 / 50–58)が日付として描画され、ロケール「短い日付」(14 / 22)は東アジアの yyyy/m/d 形式にマッピングされ、ふりがなガイド(<rPh>)が共有文字列に漏れなくなり、_xlfn.IFS(…) の将来関数マーカーが #NAME? にならず解決され、小さな使用範囲でグリッドが縮まなくなり、_x000D_ エスケープがデコードされ、ハード改行を含む行が高さを自動調整するようになりました。コピーは表示テキストをクリップボードに載せるようになり、日付セルはシリアル値 44985 ではなく 2023/2/28 をコピーします。
アップグレード
v1.4 はドロップイン更新です — コード変更は不要です。
yarn up @reogrid/pro@latest
Lite は npm で公開、ライセンスキー不要です:
npm install @reogrid/lite
v1.4 の完全な変更履歴はリリースノート、API 全体は PDF・印刷、ピボットテーブル、テーブルスタイルの各ドキュメント、体験は PDF 印刷、ピボットテーブル、テーブルスタイルの各デモをご覧ください。Lite / Pro の比較は料金表にあります。