位置を表す型は 2 つあり、どちらも構造体で0 始まりです。A1 は (0, 0) です。
名前空間は unvell.ReoGrid.Core です。
CellPosition
using unvell.ReoGrid.Core;
var p = new CellPosition(2, 1); // 0 始まり = B3
string a = p.ToAddress(); // "B3"
var parsed = CellPosition.Parse("B3"); // "$B$3"・小文字も可
if (CellPosition.TryParse("ZZ99", out var q))
Console.WriteLine(q.ToAddress());
Parse は $ 付きの絶対参照表記と小文字を受け付けます。Excel の寸法を超えるアドレスは
不正として扱われ、Parse は例外、TryParse は false を返します。
Row と Col は読み取り専用フィールドです。
RangePosition
var r = new RangePosition(row: 3, col: 1, rows: 3, cols: 4); // B4:E6
var bounds = RangePosition.FromBounds(3, 1, 5, 4); // 同じ範囲を四隅から
var parsed = RangePosition.Parse("B4:E6");
var single = RangePosition.Parse("A1"); // 単一セルも範囲として扱える
var cols = RangePosition.Parse("A:C"); // フル列
var rows = RangePosition.Parse("3:5"); // フル行
string text = r.ToAddress(); // "B4:E6" — Parse と往復できる
コンストラクタは開始位置とサイズ(rows / cols)を取ります。四隅の座標から作る場合は
FromBounds を使ってください。コーナーの順序が逆でも正規化されます。
ToAddress() は Parse と往復可能な形を返します — 単一セルなら "A1"、
フル列なら "A:C"、フル行なら "3:5"、通常は "A1:C3"。
範囲の判定
int lastRow = r.EndRow;
int lastCol = r.EndCol;
int cells = r.CellCount;
bool one = r.IsSingleCell;
CellPosition anchor = r.TopLeft;
bool inside = r.Contains(4, 2);
bool covers = r.Contains(other);
bool overlaps = r.Intersects(other);
RangePosition merged = r.Union(other);
Union は 2 つの範囲を含む最小の矩形を返します(和集合そのものではありません)。
シート文脈での解決
RangePosition はシートの情報を持ちません。Sheet1!A1:B2 のようなシート修飾は
RangePosition.Parse では扱えないため、シート側の API を使います。
// フル列・フル行はシートの寸法にクランプされ、定義名もここで解決される
RangePosition cols = ws.ResolveRange("A:C");
RangePosition named = ws.ResolveRange("MyRange");
if (ws.TryResolveRange("存在しない名前", out var found))
Console.WriteLine(found.ToAddress());
ResolveRange が RangePosition.Parse と違う点は 2 つあります。
- フル列・フル行をそのシートの寸法にクランプする — 5,000 行のシートで
"A:C"を解決すると 5,000 行ぶんになります - 定義名を解決する — シートスコープがブックスコープより優先されます
解決できない文字列を渡すと ResolveRange は例外、TryResolveRange は false を返します。
Excel の表記との対応
| 表記 | 例 | 扱い |
|---|---|---|
| 単一セル | A1 | Rows = Cols = 1 の範囲としてパース可能 |
| 通常の範囲 | B4:E6 | そのまま |
| 絶対参照 | $A$1:$C$3 | $ は無視して同じ範囲になる |
| フル列 | A:C | 1,048,576 行にまたがる(ResolveRange でクランプ) |
| フル行 | 3:5 | 16,384 列にまたがる(同上) |
| シート修飾 | Sheet1!A1 | Parse 不可 — ResolveRange か定義名 API |