unvell.ReoGrid.One を導入済みであることが前提です(インストール)。
最小のアプリ
using System.Windows.Forms;
using unvell.ReoGrid.Core;
using unvell.ReoGrid.Core.Style;
using unvell.ReoGrid.WinForms;
internal static class Program
{
[STAThread]
private static void Main()
{
// 高 DPI 環境では PerMonitorV2 を指定する。Windows がビットマップ拡大する代わりに
// 物理ピクセルのクライアント領域が渡され、コントロール側が自前でスケールする。
Application.SetHighDpiMode(HighDpiMode.PerMonitorV2);
var grid = new ReoGridControl { Dock = DockStyle.Fill };
BuildSheet(grid.ActiveWorksheet);
var form = new Form { Text = "ReoGrid One", Width = 900, Height = 600 };
form.Controls.Add(grid);
Application.Run(form);
}
private static void BuildSheet(Worksheet sheet)
{
sheet.SetText(0, 0, "商品");
sheet.SetText(0, 1, "単価");
sheet.SetText(0, 2, "数量");
sheet.SetText(0, 3, "小計");
sheet.SetText(1, 0, "ノート");
sheet.SetNumber(1, 1, 320);
sheet.SetNumber(1, 2, 12);
sheet.SetFormula(1, 3, "B2*C2"); // 先頭の '=' は付けない
sheet.SetText(2, 0, "ボールペン");
sheet.SetNumber(2, 1, 150);
sheet.SetNumber(2, 2, 40);
sheet.SetFormula(2, 3, "B3*C3");
sheet.SetText(4, 2, "合計");
sheet.SetFormula(4, 3, "SUM(D2:D3)");
// 見出し行は「行のスタイル」として設定する(セルを1つずつ回さない)
sheet.SetRowStyle(0, new StyleRecord
{
Bold = true,
BackgroundColor = 0xFFEFEFEF, // ARGB
TextAlign = HAlign.Center,
});
sheet.SetNumberFormat(new RangePosition(1, 1, 4, 3), "#,##0");
}
}
new ReoGridControl() は Sheet1 を 1 枚持つワークブックを作った状態で始まります。
ActiveWorksheet でそのシートを取得できます。
押さえておく点
数式に = は付けない
sheet.SetFormula(1, 3, "B2*C2"); // 正しい
sheet.SetFormula(1, 3, "=B2*C2"); // 誤り
SetFormula は数式を解析して依存関係を登録し、そのセルとそれに依存するセルを再計算します。
一括ロード後にシート全体を計算し直したい場合のみ sheet.Recalculate() を呼びます。
色は uint の ARGB
System.Drawing.Color ではなく uint です。コアを System.Drawing から独立させるためで、
不透明色は 0xFF から始まります。
BackgroundColor = 0xFFEFEFEF, // 不透明のライトグレー
Color = 0xFFCC0000, // 不透明の赤(文字色)
行・列単位のスタイルを使う
見出し行や列全体の書式は、セルを反復せず SetRowStyle / SetColumnStyle を使ってください。
スタイルは セル ◁ 行 ◁ 列 ◁ シート の順に継承され、行に 1 回設定するだけで済みます。
104 万行のシートでセルを回すと処理量がシート寸法に比例してしまいます。
スタイルは不変レコード
StyleRecord は record です。既存のスタイルを一部だけ変えるには with 式を使います。
var current = sheet.GetCellStyle(1, 0) ?? StyleRecord.Default;
sheet.SetCellStyle(1, 0, current with { Bold = true });
値を読む
var text = sheet.GetDisplayText(4, 3); // 書式適用後の表示文字列
var raw = sheet.GetObjectValue(4, 3); // double / string / bool / DateTime
var cell = sheet.GetValue(4, 3); // CellValue(構造体・boxing なし)
セル参照で書く
Cell(...) は A1 形式のアドレスを受け取る軽量なカーソルを返します。連鎖して書けます。
sheet.Cell("B2").SetNumber(320);
sheet.Cell("D2").SetFormula("B2*C2");
sheet.Cell("A1").SetText("商品").SetStyle(new StyleRecord { Bold = true });
主なコントロール操作
| 操作 | メンバー |
|---|---|
| 選択範囲 / アクティブセル | Selection・ActiveCell・SelectionChanged |
| 元に戻す・やり直す | Undo()・Redo()・CanUndo・CanRedo(Ctrl+Z / Ctrl+Y は配線済み) |
| 表示倍率 | Zoom(0.1〜4.0)・ZoomChanged。Ctrl+ホイールも有効 |
| ウィンドウ枠の固定 | SetFreeze(rows, cols) |
| 選択範囲の書式 | ToggleSelectionBold()・SetSelectionBackColor(...)・SetSelectionNumberFormat(...) など |
| 行列の挿入削除 | InsertRowsAtSelection()・DeleteSelectedRows() ほか |
| 列幅の自動調整 | AutoFitSelectedColumns()・AutoFitSelectedRows() |
| ワークブックの差し替え | LoadWorkbook(workbook)・NewWorkbook()・LoadJson(json) |