改ページの計算は UI に依存しないエンジン(unvell.ReoGrid.Core.Printing)が行い、
PDF・WinForms・WPF がこれを共有します。どの出力先でも同じ結果になります。
ページ設定
using unvell.ReoGrid.Core.Printing;
ws.PrintSettings = new PrintSettings
{
Paper = PaperKind.A4,
Orientation = PageOrientation.Portrait,
MarginLeft = 54, // ポイント(72 pt = 1 インチ)
MarginRight = 54,
MarginTop = 54,
MarginBottom = 54,
PrintArea = RangePosition.Parse("A1:H60"),
Scale = 1.0,
CenterHorizontally = true,
Order = PageOrder.DownThenOver,
ShowGridLines = true,
ShowHeaders = false,
};
用紙サイズ
PaperKind は A5 / A4 / A3 / B5 / B4 / Letter / Legal /
Tabloid / Executive / Custom です。
Custom の場合は CustomWidthPt / CustomHeightPt をポイントで指定します。
倍率とページ合わせ
ws.PrintSettings = new PrintSettings
{
FitToPagesWide = 1, // 横 1 ページに収める
FitToPagesTall = null, // 縦は成り行き
};
bool fit = ws.PrintSettings.IsFitToPage;
Scale は 10%〜400%(MinScale / MaxScale)。FitToPagesWide /
FitToPagesTall のいずれかを指定すると、Scale より優先されます。
画面の表示倍率(control.Zoom)は印刷に影響しません。
改ページの規則
- 行・列は分割されません。 Excel と同じく、収まらない行は次のページへ送られます
- 非表示の行・列は幅・高さ 0 として扱われます
PageOrderはページを送る順序です(DownThenOver= 下方向優先、OverThenDown= 右方向優先)
ページ数を先に知る
// ページ数だけ知りたい場合(描画せずに計算できる)
PrintLayout layout = Paginator.Paginate(ws, ws.PrintSettings);
Console.WriteLine($"{layout.Pages.Count} ページ");
描画を伴わないため、プレビュー UI やバッチ処理で使えます。
出力先ごとの呼び出し
| 出力先 | 呼び出し |
|---|---|
PdfExporter.Export(ws, path, settings) | |
| WinForms | control.CreatePrintDocument(settings) → PrintDocument.Print() |
| WPF | control.Print(settings) |
| Avalonia | 未対応(PDF 出力を使う) |
WinForms 版は PrintDocument を返すため、標準の印刷ダイアログやプレビューにそのまま渡せます。
印刷タイトル(行・列の繰り返し)
見出し行を全ページの先頭で繰り返します(Excel の「印刷タイトル」)。
// 1〜2 行目を全ページの先頭で繰り返し、A 列を全ページの左端で繰り返す
ws.PrintSettings.RepeatRows = new LineSpan(0, 1);
ws.PrintSettings.RepeatColumns = new LineSpan(0, 0);
LineSpan は 0 始まりの閉区間です(new LineSpan(0, 1) = 1〜2 行目)。
繰り返した行・列は本文からは除かれます。同じページに二重に出ることはありません。 繰り返し範囲が印刷範囲を丸ごと覆ってしまう場合、その指定は無視されます (タイトルだけのページを出し続けても意味がないため)。
ヘッダー・フッター
var hf = ws.PrintSettings.HeaderFooter;
hf.Header.Center = "&A"; // シート名
hf.Footer.Right = "&P / &N"; // 2 / 5
hf.Footer.Left = "&D &T"; // 日付と時刻
hf.FontSizePt = 9;
// 1 ページ目だけ別の見出しにする
hf.DifferentFirst = true;
hf.FirstHeader.Center = "四半期報告書";
// 余白(ポイント)— 用紙の端からバンドまでの距離
ws.PrintSettings.MarginHeader = 21.6;
ws.PrintSettings.MarginFooter = 21.6;
各バンドは左・中央・右の 3 セクションを持ち、Excel と同じ書式コードを使います。
| コード | 展開結果 |
|---|---|
&P / &N | ページ番号 / 総ページ数(&P+2 のようにオフセット可) |
&D / &T | 日付 / 時刻(実行時のカルチャ) |
&A | シート名 |
&F / &Z | ファイル名 / フォルダ |
&& | & そのもの |
&B・&I・&14・&"フォント名,スタイル" のような装飾コードは描画されませんが、
文字列としては保持されるので Excel で作られたヘッダーはそのまま往復します。
バンド全体は FontSizePt の 1 スタイルで描かれます。
&F はファイル名を渡した場合のみ展開されます
(PdfExporter.Export(..., documentName: path) / WinForms は GridPrintDocument.DocumentFileName)。
未保存のブックでは空になります — 存在しない名前を印字しないためです。
保存
PrintSettings は XLSX(<pageSetup>・<headerFooter>・組込名 _xlnm.Print_Titles)と
reogrid-json(print ブロック)の両方で往復します。Excel で開いても同じ用紙・向き・余白・
繰り返し行・ヘッダー・フッターになります。
未対応
- 印刷範囲のうち特定ページだけを出力する指定
- 手動の改ページ位置(
rowBreaks/colBreaks) - ヘッダー・フッターの装飾コード(
&Bなど)の描画。文字列としては保持されます
ウィンドウ枠の固定は画面表示のためのもので、印刷には影響しません (ウィンドウ枠の固定)。