Workbook はワークシートの集合と、ブック全体にかかる情報(定義名など)を保持します。
コントロールに依存しないため、画面のないコードからそのまま使えます。
名前空間は unvell.ReoGrid.Core です。
生成とシートの追加
using unvell.ReoGrid.Core;
var wb = new Workbook();
var sheet = wb.AddWorksheet("Sheet1");
// 行数・列数は省略すると Excel のフル寸法。スパース格納なのでコストはかからない。
var small = wb.AddWorksheet("Log", rows: 5000, cols: 32);
new Workbook() はシートを 1 枚も持たない状態で始まります。少なくとも 1 枚追加してください
(コントロール側の new ReoGridControl() は Sheet1 を作った状態で始まります)。
rows / cols を明示的に小さくするのは、そのシートの論理的な上限を狭めたいときだけです。
性能のために小さくする必要はありません。V5 のストレージは実在するセルにしかコストを払わないため、
フル寸法のシートを 100 枚作っても空であればほぼゼロです。
シートを取得する
Worksheet first = wb[0]; // 位置で取得
Worksheet? byName = wb["Sheet1"]; // 名前で取得(見つからなければ null)
Worksheet? resolved = wb.ResolveSheet("Sheet1");
int count = wb.Count;
IReadOnlyList<Worksheet> all = wb.Worksheets;
名前による取得は大文字小文字を区別しません。wb["名前"] と ResolveSheet(...) は同じもので、
どちらも見つからなければ null を返します。
アクティブシートと削除
wb.ActiveSheetIndex = 1;
Worksheet? active = wb.ActiveWorksheet;
wb.Remove(ws); // 削除。数式の参照は #REF! に治癒される
ActiveSheetIndex はモデル側が持つ状態で、保存形式にも載ります。コントロールに表示中の
シートは control.ActiveWorksheet であり、control.SetWorksheet(ws) で切り替えると
こちらも追従します。
シートを削除・リネームすると、他シートからの参照(Sheet2!A1 のようなクロスシート参照や
定義名)は自動的に追従します。削除された対象を指していた数式は #REF! になります。
寸法の上限
int maxRows = Workbook.MaxRows; // 1,048,576
int maxCols = Workbook.MaxColumns; // 16,384
Excel と同じ上限です。AddWorksheet の既定値でもあります。
主なメンバー
| メンバー | 内容 |
|---|---|
AddWorksheet(name, rows, cols) | シートを追加して返す |
Worksheets / Count | シート一覧と枚数 |
this[int] / this[string] | 位置・名前で取得(名前は見つからなければ null) |
ResolveSheet(name) | this[string] と同じ |
Remove(ws) | シートを削除 |
ActiveSheetIndex / ActiveWorksheet | アクティブシート |
Names | 定義名のレジストリ(定義名) |
DefineName / GetName / RemoveName / GetNames | 定義名の操作 |
RecalcCrossSheetFormulas() | クロスシート参照を含む数式を再計算 |
MaxRows / MaxColumns | 寸法の上限(定数) |