V5 ドキュメントはプレビュー版です。正式リリース(2026 年 8 月 19 日)まで内容が更新されることがあります。
V4 V5

V5 は後方互換なしの全面再設計です。本ページは V4(unvell.ReoGrid4)を使ってきた方向けに 「何がどう変わったか」を対比します。機能そのものの有無ではなく API の形の違いに集中しています。

実際に移行を進める手順(判断材料・作業の順序・よくあるエラーへの対処)は V4 からの移行ガイド にあります。 本ページはその作業中に引く早見表です。

設計思想の変化

違いの多くはここから派生しています。

観点V4V5
モデルと UIReoGridControl が入口。モデルは UI と密結合Workbook / Worksheet は UI 非依存。コントロール無しで完結
セル値boxing された object(約 160 B/セル)16 バイトの CellValue 構造体 +共有文字列プール
スタイル可変 WorksheetRangeStylePlainStyleFlag不変 record StyleRecordwith で差分適用)+インターン
System.Drawing.Coloruint ARGB(コア・I/O は System.Drawing に依存しない)
プラットフォーム分岐#if WINFORM / WPFクラス構造で分離(IGridGraphics の実装差し替え)
イベントWorksheet 上に多数モデルはイベントを持たない。イベントはコントロール層のみ
永続化RGF(XML)/BinaryFormatterreogrid-json(Web 版と相互運用可能)

名前空間・パッケージ

V4V5
ルート名前空間unvell.ReoGridunvell.ReoGrid.Core(+ .Style .CellTypes .ConditionalFormatting .IO ほか)
WinForms コントロールunvell.ReoGrid.ReoGridControlunvell.ReoGrid.WinForms.ReoGridControl
WPF コントロール同名(#if 切替、unvell.ReoGridWPF.dllunvell.ReoGrid.Wpf.ReoGridControl(別アセンブリ)
パッケージunvell.ReoGrid4 / unvell.ReoGrid4.Wpfunvell.ReoGrid.One / .One.Wpf / .One.Avalonia / .One.Core
XLSX / PDF本体 DLL に内蔵unvell.ReoGrid.IO.Excel / .IO.Pdf(One パッケージに同梱)

V4 の ID は 4.x で凍結され、V5 は別 ID で配信されます。同一 ID の 5.x にすると、 バージョンを上げた瞬間にビルドが壊れるためです。

Workbook / Worksheet の作成

V4 はコントロール経由が基本で、画面なしの利用には ReoGridControl.CreateMemoryWorkbook() という 専用 API が必要でした。V5 はモデルを直接生成します。

using unvell.ReoGrid.Core;
using unvell.ReoGrid.Core.CellTypes;
using unvell.ReoGrid.Core.ConditionalFormatting;
using unvell.ReoGrid.Core.Style;

var wb = new Workbook();
var ws = wb.AddWorksheet("Sheet1");   // 既定で 1,048,576 × 16,384(スパースなのでコストなし)
control.LoadWorkbook(wb);             // UI に載せるときだけコントロールへ
  • control.CurrentWorksheetcontrol.ActiveWorksheet(モデル側は wb.ActiveWorksheet / wb.ActiveSheetIndex
  • V4 の「シート=実サイズ」という考え方は廃止。V5 は常に Excel フル寸法でスパース格納します

セル値の読み書き — 最大の書き換えポイント

V4 の sheet["A1"] = 10 という object 代入は廃止されました。

ws.SetNumber(0, 0, 10);
ws.SetText(4, 0, "text");

ws.Cell("A1").SetNumber(10);                  // CellCursor(struct・チェーン可)
ws.Cell("B1").SetText("hello").SetStyle(style);

object? v = ws.GetObjectValue(0, 0);          // object が欲しい場合
string display = ws.GetDisplayText(0, 0);     // 書式適用後の表示文字列
  • 値の実体は CellValue 構造体(Number / Boolean / DateTime / Text / Error)。 GetValue / SetValue で直接扱えます
  • V4 の 1D / 2D object[] 一括流し込みに相当する糖衣はありません(ループで書きます)
  • 「ユーザー入力文字列 → 値」の変換(= で数式、数値パース、TRUE/FALSE)はコントロールの SetActiveCellInput(text) を通します

数式

V4 は "=..." を値として代入していましたが、V5 は専用 API で、先頭の = を付けません

ws.SetFormula(2, 0, "SUM(A1:A2)");   // 先頭の '=' は付けない
string? f = ws.GetFormula(2, 0);     // "SUM(A1:A2)"
ws.Recalculate();                    // 明示的な全再計算(通常は依存再計算が自動)

依存グラフによる自動再計算と、行列の挿入削除に伴う参照シフトは V5 が自動処理します。 クロスシート参照(Sheet2!A1)と定義名にも対応しています。

位置型

どちらも 0 始まりです。V5 は文字列パースを static Parse / TryParse に統一しました。

var pos = CellPosition.Parse("B3");            // "$B$3"・小文字可。TryParse あり
var range = RangePosition.Parse("B4:E6");      // "A1"・"$A$1:$C$3"・コーナー逆順も可
var cols = RangePosition.Parse("A:C");         // フル列
var rows = RangePosition.Parse("3:5");         // フル行
var num = RangePosition.FromBounds(3, 1, 5, 4);

// シート文脈で解決(フル列・行をシート寸法へクランプし、定義名も解決する)
var r1 = ws.ResolveRange("A:C");
var r2 = ws.ResolveRange("MyRange");           // TryResolveRange あり

シート修飾(Sheet1!A1:B2)は RangePosition.Parse では扱えません (RangePosition はシート情報を持たないため)。Worksheet.ResolveRange か定義名 API を使います。

スタイル

PlainStyleFlag は廃止です。StyleRecord の **nullable プロパティ(null=未指定)**が Flag の役割を兼ねます。

ws.SetCellStyle(r, c, (ws.GetCellStyle(r, c) ?? StyleRecord.Default)
	with { BackgroundColor = 0xFFFFFF00u, Bold = true });

ws.SetRowStyle(3, new StyleRecord { Bold = true });                  // 行・列の既定(O(1))
ws.SetColumnStyle(0, new StyleRecord { TextAlign = HAlign.Right });
  • 範囲一括の SetRangeStylesWorksheet にありません。行・列単位は既定スタイルへ、 任意範囲はセルのループか、UI 経由なら control.SetSelectionBackColor(...) 系を使います
  • 継承解決後の実効スタイルは ws.GetEffectiveStyle(r, c)
  • 色は uint ARGB(不透明の黄なら 0xFFFFFF00u)。System.Drawing.Color は WinForms 層のみ

罫線

BorderPositions ビットフラグとプリセット(RangeBorderStyle.BlackSolid など)は廃止され、 ws.Borders の側テーブルになりました。

var edge = new BorderEdge(BorderLineStyle.Solid, 0xFF000000u, 1);

ws.Borders.SetOutline(range, edge);
ws.Borders.SetEdge(r, c, BorderSide.Bottom, edge);

範囲内部の一括設定(V4 の InsideAll / InsideHorizontal 相当)は現状 outline のみで、 内部罫線はセルのループになります。UI の選択範囲には control.SetSelectionAllBorders(...) があります。

表示書式

CellDataFormatFlag*FormatArgs は全廃され、Excel と同じ書式コード文字列に一本化されました。 XLSX との相互運用がロスレスになります。

ws.SetNumberFormat(range, "#,##0.00");
ws.SetNumberFormat(r, c, "yyyy/mm/dd");
ws.SetNumberFormat(r, c, "[Red]-#,##0;[Blue]#,##0");   // セクション・条件・色に対応

V4 の NumberNegativeStyle.RedBrackets などは書式コードで表現します(#,##0;[Red](#,##0))。

構造操作

操作V4V5
結合MergeRange(range) / UnmergeRangews.MergeRange(range) / ws.UnmergeAt(r, c)(判定は ws.Merges.IsMerged(r, c)
列幅・行高SetColumnsWidth(col, count, w)ws.Columns.SetSize(i, w) / ws.Rows.SetSize(i, h)(非表示は SetHidden
挿入・削除InsertRows / DeleteRows ほか同名(結合・罫線・数式参照・セル型も自動でシフト)
フリーズworksheet.FreezeToCell(r, c)FreezeAreacontrol.SetFreeze(rows, cols)ビュー側の状態であり、モデルは持たない
アウトラインGroupRows / CollapseOutline ほかws.GroupRows(row, count) / ws.UngroupRows / ws.RowOutlines
AutoFitAutoFitColumnWidthcontrol.AutoFitSelectedColumns() / AutoFitSelectedRows()(測定は使用範囲のみ)

セル型

V4 はセルごとに body インスタンスを代入していたため、セル数ぶんの実体ができました。 V5 はフライウェイトな記述子を範囲に割り当てます(100 万行のチェックボックス列でもエントリ 1 個)。

ws.SetCellType(3, 1, CheckboxCellType.Instance);
ws.SetCellType(range, new DropdownCellType(["Apple", "Orange"], editable: false));
ws.Cell("C3").SetCellType(new ProgressCellType(max: 100));
  • 状態(チェックの有無・選択値)はセル値に格納されます。記述子は共有され、状態を持ちません
  • V4 の body ごとのイベント(btn.Click など)は廃止。コントロールの CellButtonClicked で受けます
  • 組込型: CheckBox / DropdownList / Progress / Button / Hyperlink + Sparkline(V5 で追加)

条件付き書式

V4 の ConditionalStyle は簡易な機構でしたが、V5 は OOXML 準拠のフルセットです (cellIs / expression / containsText / colorScale / dataBar / top10 / aboveAverage / duplicate / unique / iconSet、priority + stopIfTrue、XLSX 往復)。

ws.AddConditionalFormat(range, new CellIsRule
{
	Operator = CfOperator.GreaterThan,
	Value1 = CfValue.Num(100),
	Style = new CfStyle { BackgroundColor = 0xFFFFC7CE, Color = 0xFF9C0006 },
});

コントロール

V4V5
選択範囲worksheet.SelectionRange / SelectRange(...)control.Selection(取得)+ control.MoveTo(r, c)。モデルは選択状態を持たない
イベントCellDataChangedCellMouseDown/Up/MoveBefore/AfterCellEdit ほか多数(Worksheet 上)コントロール上の少数のみ(SelectionChangedWorkbookChangedActiveSheetChangedHistoryChangedZoomChangedContextMenuRequestedCellButtonClicked
編集StartEdit / EndEditBeginEdit(initial) / CancelEdit()GetActiveCellInput() / SetActiveCellInput(text)
クリップボードCopy / Cut / PasteCopySelection() / CutSelection() / PasteClipboard()
コンテキストメニュー組込メニューありContextMenuRequested でホスト側が構築
表示切替SetSettings(WorksheetSettings.View_ShowGridLine, ...)control.ShowGridLines / ShowHeaders / ShowOutlines プロパティ

イベントが少ないのは意図的な設計です。モデルがイベントを持たないことで、ヘッドレス利用時に 不要な通知経路を抱えずに済みます。

I/O

FileFormat 列挙による自動判別は無くなり、形式ごとの static クラスになりました。

V4V5
XLSX 読みwb.Load(path)XlsxReader.Read(path)(ストリーミング。巨大ファイルは OpenVirtual
XLSX 書きwb.Save(path, FileFormat.Excel2007)XlsxWriter.Write(wb, path)
ネイティブ形式RGF(SaveRGFRGF は廃止 → reogrid-json(ReoGridJsonIO.Write / Read
CSVworksheet.ExportAsCSV(path)CsvIO.Write(ws) / CsvIO.Read(ws, text)
PDF印刷経由のみPdfExporter.Export(wb, path, settings)(V5 で新規)
  • V4 資産の移行経路は「V4 で XLSX 保存 → V5 で読み込み」です
  • XLSX 読み込み時、数式は Excel のキャッシュ値を保持し、再評価しません(Recalculate() で明示的に)

意図的に廃止したもの(復活しません)

RunScript / ReoScript、RGF、PlainStyleFlagCellDataFormatFlag*FormatArgsFileFormat 列挙、#if WINFORM / WPF、公開 API における System.Drawing 依存(コア・I/O)、 Android / iOS 対応。

移行チートシート

やりたいことV4V5
値を書くsheet["A1"] = 10ws.Cell("A1").SetNumber(10)
値を読むsheet.GetCellData<double>("A1")ws.GetObjectValue(0, 0) / ws.GetValue(0, 0)
数式sheet["A3"] = "=SUM(A1:A2)"ws.SetFormula(2, 0, "SUM(A1:A2)")
背景色SetRangeStyles(r, style { Flag = BackColor })SetCellStyle(… with { BackgroundColor = argb })
表示書式SetRangeDataFormat(r, Number, args)ws.SetNumberFormat(r, "#,##0.00")
罫線SetRangeBorders(r, Outside, BlackSolid)ws.Borders.SetOutline(r, edge)
結合MergeRange(r)ws.MergeRange(r)
列幅SetColumnsWidth(c, n, w)ws.Columns.SetSize(c, w)
フリーズws.FreezeToCell(r, c)control.SetFreeze(rows, cols)
チェックボックスsheet[r, c] = new CheckBoxCell()ws.SetCellType(r, c, CheckboxCellType.Instance)
保存wb.Save(path, FileFormat.Excel2007)XlsxWriter.Write(wb, path)
読込wb.Load(path)XlsxReader.Read(path)
選択取得worksheet.SelectionRangecontrol.Selection
アクティブシートcontrol.CurrentWorksheetcontrol.ActiveWorksheet

ライセンスキーはそのまま使えます

V4 用に発行済みのキーは V5 でもそのまま通ります。再発行は不要です。 詳細は ライセンスキーの適用 を参照してください。

ページの内容は役に立ちましたか?