V4 V5

改ページの計算は 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,
};

用紙サイズ

PaperKindA5 / 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 やバッチ処理で使えます。

出力先ごとの呼び出し

出力先呼び出し
PDFPdfExporter.Export(ws, path, settings)
WinFormscontrol.CreatePrintDocument(settings)PrintDocument.Print()
WPFcontrol.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 など)の描画。文字列としては保持されます

ウィンドウ枠の固定は画面表示のためのもので、印刷には影響しません (ウィンドウ枠の固定)。

次に読む

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