罫線はセル値とは別の側テーブル ws.Borders(BorderTable)が保持します。
罫線を持つセルだけがテーブルに載るため、コストはシート寸法ではなく罫線の数に比例します。
V4 の BorderPositions ビットフラグとプリセット(RangeBorderStyle.BlackSolid など)は
廃止されました。

範囲の外周
using unvell.ReoGrid.Core;
var edge = new BorderEdge(BorderLineStyle.Solid, 0xFF000000u, 1f);
ws.Borders.SetOutline(RangePosition.Parse("B2:D5"), edge);
BorderEdge は線種・色(uint ARGB)・太さを持つ不変の値型です。
線種(BorderLineStyle) | |
|---|---|
None | 罫線なし |
Solid | 実線 |
Dashed | 破線 |
Dotted | 点線 |
Double | 二重線 |
Thick | 太線 |
辺を個別に設定する
var thick = new BorderEdge(BorderLineStyle.Thick, 0xFF0066CCu, 2f);
ws.Borders.SetEdge(1, 1, BorderSide.Bottom, thick);
ws.Borders.SetEdge(1, 1, BorderSide.Right, BorderEdge.None); // 消す
BorderEdge bottom = ws.Borders.GetEdge(1, 1, BorderSide.Bottom);
if (!bottom.IsNone)
Console.WriteLine(bottom.Style);
BorderSide は Top / Right / Bottom / Left です。
罫線を消すには BorderEdge.None を設定します。
セルの 4 辺をまとめて扱う
CellBorders b = ws.Borders.Get(1, 1);
if (!b.IsEmpty)
Console.WriteLine(b[BorderSide.Top].Width);
// 1 辺だけ差し替えた新しい値を作る(CellBorders は不変)
ws.Borders.Set(1, 1, b.With(BorderSide.Left, BorderEdge.None));
CellBorders は 4 辺をまとめた不変の値型です。With(side, edge) は 1 辺だけ差し替えた
新しい値を返します。
内部罫線
範囲内部の一括設定に相当する API は、現状外周(SetOutline)のみです。
内部の罫線はループで設定します。
// 内部の横罫線は行をまたぐ辺を順に設定する
for (int r = range.Row; r < range.EndRow; r++)
for (int c = range.Col; c <= range.EndCol; c++)
ws.Borders.SetEdge(r, c, BorderSide.Bottom, edge);
UI の選択範囲に対しては、コントロール側にヘルパがあります。
control.SetSelectionOutline(color, width)— 外周control.SetSelectionAllBorders(color, width)— 全辺control.ClearSelectionBorders()
一覧と消去
int count = ws.Borders.Count; // 罫線を持つセルの数(シート寸法とは無関係)
foreach (var (row, col, borders) in ws.Borders.Entries())
Console.WriteLine($"{row},{col}: {borders}");
ws.Borders.Clear();
挿入・削除との関係
行や列を挿入・削除すると、罫線は自動的に追従します。
次に読む
- セルの結合
- スタイル