V4 V5

位置を表す型は 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 は例外、TryParsefalse を返します。

RowCol は読み取り専用フィールドです。

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());

ResolveRangeRangePosition.Parse と違う点は 2 つあります。

  1. フル列・フル行をそのシートの寸法にクランプする — 5,000 行のシートで "A:C" を解決すると 5,000 行ぶんになります
  2. 定義名を解決する — シートスコープがブックスコープより優先されます

解決できない文字列を渡すと ResolveRange は例外、TryResolveRangefalse を返します。

Excel の表記との対応

表記扱い
単一セルA1Rows = Cols = 1 の範囲としてパース可能
通常の範囲B4:E6そのまま
絶対参照$A$1:$C$3$ は無視して同じ範囲になる
フル列A:C1,048,576 行にまたがる(ResolveRange でクランプ)
フル行3:516,384 列にまたがる(同上)
シート修飾Sheet1!A1Parse 不可 — ResolveRange か定義名 API

次に読む

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