行と列のメタ情報は ws.Rowsws.Columns(どちらも AxisIndex)が保持します。 既定値と異なる行・列だけが実体を持つため、100 万行のシートでも実際のメモリは 指定した本数ぶんだけです。

高さを変えた行、幅を変えた列、非表示にした行

サイズ

using unvell.ReoGrid.Core;
using unvell.ReoGrid.Core.Style;

ws.Rows.SetSize(0, 32);        // 1 行目の高さ(論理ピクセル)
ws.Columns.SetSize(2, 160);    // C 列の幅

double h = ws.Rows.GetSize(0);
double w = ws.Columns.GetSize(2);

// 既定サイズはシート単位。個別指定のない行・列はこの値になる
ws.SetDefaultSizes(rowHeight: 24, columnWidth: 100);

単位は論理ピクセル(96 DPI 基準)です。高 DPI 環境でのスケーリングは描画側が行うため、 モデルの値は解像度に依存しません。

既定値は行 20、列 80 です(Worksheet.DefaultRowHeight / DefaultColumnWidth)。

自動サイズと手動サイズ

行・列は「まだ誰もサイズを決めていない自動」か「ユーザーが決めた手動」かを覚えています。 Excel の customHeight / customWidth に対応する区別です。

呼ぶメソッド結果
SetSize(i, size)手動になる。以後、内容が変わっても勝手に高さは変わらない
SetAutoSize(i, size)自動のまま。内容に合わせて再計算され続ける
IsCustomSize(i)手動かどうか

自動の行は、セルの入力を確定したタイミングで内容に合わせて高さが調整されます (改行を増やせば伸び、減らせば縮む)。行ヘッダー境界のダブルクリックによる AutoFit は SetAutoSize を通るので、一度手動にした行を自動に戻す操作になります(Excel と同じ)。

XLSX では customHeight 属性としてそのまま往復します。reogrid-json にはこの区別を持つ フィールドが無いため(reogrid-web とバイト互換のフォーマットを崩さないため)、JSON から 読み込んだサイズは手動として扱われます — 保存したときの見た目が編集で動かないほうが 安全なためです。

非表示

ws.Rows.SetHidden(4, true);
bool hidden = ws.Rows.IsHidden(4);

// フィルタによる非表示はユーザー操作と区別される
bool byUser = ws.Rows.IsUserHidden(4);
bool byFilter = ws.Rows.IsFilterHidden(4);

double effective = ws.Rows.EffectiveSize(4);   // 非表示なら 0

非表示には2 系統があります。ユーザーが明示的に隠したものと、フィルタが隠したものです。 IsHidden はどちらかに該当すれば trueSetHidden はユーザー側だけを操作します。

分けてある理由は、フィルタを解除したときにユーザーが隠した行まで復活してしまわないためです。 フィルタ側は フィルタ が管理します。

行・列単位のスタイル

// 行・列の既定スタイル。セルを 1 つずつ回さずに済む
ws.SetRowStyle(0, new StyleRecord { Bold = true, BackgroundColor = 0xFFEFEFEF });
ws.SetColumnStyle(3, new StyleRecord { TextAlign = HAlign.Right });

StyleRecord? rowStyle = ws.GetRowStyle(0);
StyleRecord? colStyle = ws.GetColumnStyle(3);

列全体・行全体の書式は必ずこちらを使ってください。 セルを反復して設定すると、 処理量とメモリがシート寸法に比例します。行・列に 1 回設定すれば、その行・列に属する すべてのセルへ継承されます(セル ◁ 行 ◁ 列 ◁ シート)。

継承の詳細は スタイルの継承 を参照してください。

挿入と削除

ws.InsertRows(3, 2);
ws.DeleteColumns(5, 1);

AxisIndex にも InsertLines / DeleteLines がありますが、Worksheet 側のメソッドを 使ってください。セル値・結合・罫線・数式参照・セル型など、他のテーブルとまとめて 整合を取る必要があるためです。

保持している数を確認する

// 既定と異なる行だけが実体を持つ。100 万行のシートでもこの数は小さいまま
int sized = ws.Rows.SizeOverrideCount;
int styled = ws.Rows.StyleOverrideCount;
int hiddenCount = ws.Rows.HiddenCount;

これらは主に診断用です。想定より大きい場合は、行・列を反復して個別設定している箇所が ないか確認してください。

主なメンバー(AxisIndex

メンバー内容
GetSize(i) / SetSize(i, size)サイズ(SetSize は手動指定)
SetAutoSize(i, size) / IsCustomSize(i) / SetCustomSize(i, custom)自動・手動の区別
DefaultSize既定サイズ(Worksheet.SetDefaultSizes で変更)
EffectiveSize(i)非表示なら 0、それ以外は GetSize
IsHidden(i) / IsUserHidden(i) / IsFilterHidden(i)非表示判定
SetHidden(i, hidden)ユーザー非表示の設定
Count行数・列数
SizeOverrideCount / StyleOverrideCount / HiddenCount実体を持つ本数
HiddenSorted()非表示の位置一覧

次に読む

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