V4 V5

自動ページング

ワークシートを印刷する際、ReoGridは自動的にページングを実行します。ページング操作はワークシートをスキャンし、ページング設定に従って各ページの印刷範囲を決定します。例えば、以下の画像は縦方向にページングされたワークシートを示しています。

108

Excelと同様に、ReoGridは各ページに収まるセルの最大数を検出します。完全に印刷できないセルは次のページに移動されます。以下に示す通りです。

109

自動ページングの実行またはページ区切りのリセット

いつでも自動ページングを実行したり、現在のページ区切りをリセットするには:

sheet.AutoSplitPage();

注意: このメソッド自体は非常に高速に実行されます(< 10 ms)が、リモートプリンターがデフォルトプリンターに設定されている場合、リモートプリンターからの用紙サイズの取得に100 ms以上かかることがあるため(ネットワーク環境に依存)、遅くなる場合があります。

ページ区切り線の表示

画面上にページ区切り線を表示するには:

sheet.EnableSettings(WorksheetSettings.View_ShowPageBreaks);

結果: 120

印刷可能な境界の自動チェック

印刷範囲が指定されていない場合、ReoGridは自動的にセルの使用範囲を検出し、それを印刷範囲として設定します。

121

印刷範囲の変更

ワークシートのPrintableRangeプロパティを使用して印刷範囲を変更します。

sheet.PrintableRange = new RangePosition(1, 1, 9, 9);

122

印刷範囲が用紙サイズより大きい場合、自動的に分割されます。印刷範囲外のセルは印刷されません。

ページング順序の変更

PrintSettings.PageOrderプロパティを使用してページングの方向を変更します。

112

sheet.PrintSettings.PageOrder = PrintPageOrder.DownThenOver;

ページ設定の変更

ワークシートのPrintSettingsプロパティを使用して用紙設定を変更します。

// change page to landscape
sheet.PrintSettings.Landscape = true;

// set page margins
sheet.PrintSettings.Margins = new PageMargins(5);

例:横向きへの自動ページング

123

印刷スケーリング

PrintSettingsのPageScalingプロパティを使用して印刷スケーリングを設定できます。

sheet.PrintSettings.PageScaling = 0.7f;    // scale to 70%

注意: ページスケーリングが変更されると、ワークシートは自動的に再ページングされます。

ページ数に合わせて印刷

v4.6 から、FitToPage を使うと、Excel の「次のページ数に合わせて印刷」と同じく、印刷範囲を FitToPagesWide × FitToPagesTall ページに収めるよう縮小します。どちらのページ数も既定値は 1 なので、FitToPage をオンにするだけでシートを 1 ページに収めます。ページ数に 0 を指定すると、その方向は制限しません。

// シート全体を 1 ページに収める
sheet.PrintSettings.FitToPage = true;
sheet.AutoSplitPage();

// 横は 1 ページ、縦は必要なだけ
sheet.PrintSettings.FitToPage = true;
sheet.PrintSettings.FitToPagesWide = 1;
sheet.PrintSettings.FitToPagesTall = 0;
sheet.AutoSplitPage();

FitToPage がオンの間は、AutoSplitPage が PageScaling を決めます。縮小だけを行い(もともと収まるシートは 100% のまま印刷します)、Excel と同じく手動の改ページは使いません。

ページ中央に配置

v4.6 から、各ページの内容を余白の間の中央に配置できます。

sheet.PrintSettings.CenterHorizontally = true;
sheet.PrintSettings.CenterVertically = true;

ページ数に合わせる設定と中央への配置は、印刷・印刷プレビュー・PDF 出力に反映されます。

ヘッダーとフッター

v4.6 から、印刷したページ(WinForms の印刷と印刷プレビュー)と PDF に出力したページに、ワークシートのヘッダーとフッターが入ります。Worksheet.HeaderFooter に Excel の書式コードで設定します。

// 左に「月次レポート」、右に「2 / 5 ページ」
sheet.HeaderFooter.OddHeader = "&L月次レポート&R&P / &N ページ";

// 中央にシート名
sheet.HeaderFooter.OddFooter = "&C&A";
コード印刷される内容
&L / &C / &R左 / 中央 / 右のセクションを開始
&Pページ番号
&N総ページ数
&D現在の日付
&T現在の時刻
&Aシート名
&&文字としての &

OddHeader と OddFooter は、次の設定をオンにしない限りすべてのページで使います。

// 先頭ページだけ別のヘッダー・フッター
sheet.HeaderFooter.DifferentFirst = true;
sheet.HeaderFooter.FirstHeader = "&C四半期 売上報告書";

// 奇数ページと偶数ページで別のヘッダー・フッター
sheet.HeaderFooter.DifferentOddEven = true;
sheet.HeaderFooter.EvenFooter = "&L&P ページ";
sheet.HeaderFooter.OddFooter = "&R&P ページ";

用紙の端からヘッダー・フッターまでの距離はインチ単位で指定します(既定は Excel と同じ 0.3)。

sheet.PrintSettings.HeaderMargin = 0.5f;
sheet.PrintSettings.FooterMargin = 0.5f;

ScaleWithDocument(ヘッダー・フッターを PageScaling に合わせて拡大縮小する)と AlignWithMargins(余白に合わせる)にも対応しています。どちらも既定は true です。

ヘッダーとフッターは、シートの既定のフォントで 1 行に、黒で印刷します。テキスト内の Excel のフォント・サイズ・色の指定は読み飛ばし、画像(&G)は印刷せず、ファイル名のコード(&F・&Z)は何も印刷しません。

Excel ファイルのページ設定

v4.6 から、XLSX ファイルのページ設定を読み込み、保存できます。対象は用紙サイズ・向き・倍率・ページ数に合わせる設定・ページの順序・中央への配置・枠線の印刷・印刷範囲・ページの余白・ヘッダーとフッターです。Excel で印刷用に整えたブックを、アプリからも設計どおりに印刷できます。

ページ区切りの挿入

ページ区切りを挿入するには、ワークシートのRowPageBreaksおよびColumnPageBreaksプロパティを使用します。

// insert page break
sheet.ColumnPageBreaks.Add(5);

スプレッドシートが2ページに分割されます:

124

ユーザーページ区切りとシステムページ区切り

ページ区切りには2種類あります。実線はユーザーページ区切りで、AutoSplitPageメソッドまたはユーザー操作によって生成されます。破線はシステムページ区切りで、ワークシートを複数ページに分割するためにReoGridによって自動的に挿入されます。

125

ページ区切りの変更

ページ区切りのインデックスを変更または移動するには(ユーザーまたはシステムページ区切りを問わず)、以下のメソッドを使用します。

void sheet.ChangeColumnPageBreak(int oldIndex, int newIndex);
void sheet.ChangeRowPageBreak(int oldIndex, int newIndex);

ページ区切りが変更されると、ユーザーページ区切りになり、ReoGridによって自動的に更新されなくなります。

ページの反復処理

ワークシートのIteratePrintPagesメソッドは、すべての印刷ページを反復処理するために使用されます。このメソッドは各ページの範囲位置を返します。

sheet.IteratePrintPages( range => {
  Console.WriteLine("Page range is: " + range.ToAddress());
  return true;
});

出力は以下のように印刷されます。

Page range is: A1:E11
Page range is: F1:K11

指定した順序でページを反復処理することもできます。

sheet.IteratePrintPages(PrintPageOrder.OverThenDown, range => { ... });

ページング順序が指定されていない場合、印刷設定のページ順序が使用されます。

エンドユーザーによるページ区切りの変更/調整を無効にする

エンドユーザーがマウスでページ区切りのインデックスを変更することを防ぐには、ワークシートの設定を行います。

sheet.SetSettings(WorksheetSettings.Behavior_AllowUserChangingPageBreaks, false);

印刷セッション

印刷セッションは、ワークブック全体または指定したワークシートを印刷するために使用されます。ワークブック全体または複数のワークシートを印刷するには、ワークブックインスタンス(コントロール)から印刷セッションを作成します。単一のワークシートを印刷するには、そのワークシートから印刷セッションを作成します。

263

単一ワークシートの印刷

var session = worksheet.CreatePrintSession();
session.Print();

ワークブック全体(全ワークシート)の印刷

var session = reoGridControl.CreatePrintSession();
session.Print();

指定ワークシートの印刷

var session = reoGridControl.CreatePrintSession();
session.Worksheets.Clear();
session.Worksheets.Add(grid.Worksheets["Sheet1"]);
session.Worksheets.Add(grid.Worksheets["Sheet3"]);
session.Print();

印刷プレビュー

以下のコードは、標準の.NET印刷プレビューダイアログを表示します。

var sheet = reoGridControl.CurrentWorksheet;

using (var session = sheet.CreatePrintSession())
{
  using (PrintPreviewDialog ppd = new PrintPreviewDialog())
  {
    ppd.Document = session.PrintDocument;
    ppd.SetBounds(200, 200, 1024, 768);
    ppd.PrintPreviewControl.Zoom = 1d;
    ppd.ShowDialog(this);
  }
}

印刷

以下のコードは、デフォルトの印刷設定でワークシートを印刷します。

var session = sheet.CreatePrintSession();
session.Print();

標準印刷ダイアログを使用した印刷

以下のコードは、標準印刷ダイアログを表示し、指定されたワークシートを印刷します。

System.Drawing.Printing.PrintDocument doc = null;

try
{
  doc = worksheet.CreatePrintSession().PrintDocument;
}
catch (Exception ex)
{
  MessageBox.Show(this, ex.Message, this.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Information);
  return;
}

using (var pd = new System.Windows.Forms.PrintDialog())
{
  pd.Document = doc;
  pd.UseEXDialog = true;  // in 64bit Windows

  if (pd.ShowDialog() == System.Windows.Forms.DialogResult.OK)
  {
    doc.PrinterSettings = pd.PrinterSettings;
    doc.Print();
  }
}

if (doc != null) doc.Dispose();

システムページ設定ダイアログの表示

using (PageSetupDialog psd = new PageSetupDialog())
{
  // transform ReoGrid page settings to System page settings
  psd.PageSettings = worksheet.PrintSettings.CreateSystemPageSettings();

  psd.AllowMargins = true;
  psd.AllowPrinter = true;
  psd.AllowPaper = true;
  psd.EnableMetric = true;

  if (psd.ShowDialog() == System.Windows.Forms.DialogResult.OK)
  {
    // transform System page settings to ReoGrid page settings
    worksheet.PrintSettings.ApplySystemPageSettings(psd.PageSettings);
  }
}

プログラムでプリンターを選択

PrintSettings.PrinterNameを使用して、ダイアログを表示せずに出力を特定のプリンターに直接送信します。null(デフォルト)に設定すると、システムのデフォルトプリンターが使用されます。

sheet.PrintSettings.PrinterName = "Microsoft Print to PDF";

var session = sheet.CreatePrintSession();
session.Print();

PDF に出力

プリンターを使わずにページを PDF ファイルに書き出すには、PDFExporter(v4.6、WinForms)を使います。PDF は、このページで説明したとおりにページ分けされます。PDF としてエクスポートをご覧ください。

グリッド線の印刷

デフォルトでは、グリッド線は印刷されません。ShowGridLinesをtrueに設定すると、印刷出力にグリッド線が含まれます。

sheet.PrintSettings.ShowGridLines = true;

余白インジケーターの表示

ShowMarginsがtrueの場合、各印刷ページの端に余白境界マークが描画されます(印刷プレビューおよび印刷出力で表示されます)。

sheet.PrintSettings.ShowMargins = true;

用紙サイズの設定

PaperNameを使用して、定義済みの用紙サイズから選択します。文字列はPaperManager.PaperSizesInchのキーと一致する必要があります。

一般的な値:"A3"、"A4"、"A5"、"Letter"、"Legal"、"Ledger"、"B4"、"B5"、"JIS_B4"、"JIS_B5"。

sheet.PrintSettings.PaperName = "A4";

PaperNameが既知のサイズに設定されている場合、PaperWidthとPaperHeightはデフォルト値のままで構いません。PaperNameを"Custom"に設定すると、寸法を明示的に指定できます。

sheet.PrintSettings.PaperName   = "Custom";
sheet.PrintSettings.PaperWidth  = 6.0f;   // inches
sheet.PrintSettings.PaperHeight = 9.0f;   // inches

すべてのサイズはインチ単位です。Landscapeフラグは、印刷可能な領域を計算する際に幅と高さを自動的に入れ替えます。

利用可能な用紙サイズ

カテゴリ名前
ISO AシリーズA0 — A8
ISO BシリーズB0 — B10
ISO CシリーズC2 — C6
JIS BシリーズJIS_B0 — JIS_B12
北米Letter, Legal, Ledger, Tabloid, Executive
ANSIANSI_C, ANSI_D, ANSI_E
その他D0, SRA0 — SRA4, RA0 — RA2, Custom

ページ余白の設定

PageMarginsは4つの独立した余白値をインチ単位で格納します。単一値コンストラクタですべての辺を一度に設定するか、4値コンストラクタで個別に制御します。

// All four margins = 1 inch
sheet.PrintSettings.Margins = new PageMargins(1f);

// Top=0.5, Bottom=0.5, Left=1, Right=1 (inches)
sheet.PrintSettings.Margins = new PageMargins(0.5f, 0.5f, 1f, 1f);

// Adjust individual sides
var m = sheet.PrintSettings.Margins;
m.Left  = 0.75f;
m.Right = 0.75f;
sheet.PrintSettings.Margins = m;

// Remove all margins
sheet.PrintSettings.Margins = PageMargins.Empty;

すべてのページ区切りをリセット

ResetAllPageBreaks()を呼び出して、すべてのユーザー定義の区切りをクリアし、自動ページングをゼロから再実行します。

sheet.ResetAllPageBreaks();

これは、PrintableRangeのクリア、RowPageBreaksとColumnPageBreaksからすべてのエントリの削除、およびAutoSplitPage()の呼び出しと同等です。

PrintableRange変更イベント

PrintableRangeChangedにサブスクライブして、印刷範囲が変更されるたびに通知を受け取ります。

sheet.PrintableRangeChanged += (s, e) =>
{
    Console.WriteLine("Printable range: " + sheet.PrintableRange.ToAddress());
};

PrintSettingsプロパティリファレンス

プロパティ型デフォルト説明
PrinterNamestringnull出力プリンター名。null = システムデフォルト。
PaperNamestring"Letter"用紙サイズ名(PaperManager.PaperSizesInchのキー)。
PaperWidthfloat8.5f用紙幅(インチ)(PaperNameが"Custom"の場合に使用)。
PaperHeightfloat11f用紙高さ(インチ)(PaperNameが"Custom"の場合に使用)。
Landscapeboolfalsetrueで横向き。
MarginsPageMarginsnew PageMargins(1f)ページ余白(インチ)。
PageOrderPrintPageOrderDownThenOverページ順序:DownThenOverまたはOverThenDown。
PageScalingfloat1fスケール倍率(0.1 — 4.0)。1f = 100%。
ShowGridLinesboolfalseセルのグリッド線を印刷。
ShowMarginsboolfalseページに余白境界マークを描画。
HeaderMarginfloat0.3f用紙の上端からヘッダーまでの距離(インチ)(v4.6)。
FooterMarginfloat0.3f用紙の下端からフッターまでの距離(インチ)(v4.6)。
FitToPageboolfalse印刷範囲を FitToPagesWide × FitToPagesTall ページに収めるよう縮小(v4.6)。
FitToPagesWideint1FitToPage がオンのときの横のページ数。0 = 制限なし(v4.6)。
FitToPagesTallint1FitToPage がオンのときの縦のページ数。0 = 制限なし(v4.6)。
CenterHorizontallyboolfalse各ページの内容を余白の間の左右中央に配置(v4.6)。
CenterVerticallyboolfalse各ページの内容を余白の間の上下中央に配置(v4.6)。
ページの内容は役に立ちましたか?