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

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

自動ページングの実行またはページ区切りのリセット
いつでも自動ページングを実行したり、現在のページ区切りをリセットするには:
sheet.AutoSplitPage();
注意: このメソッド自体は非常に高速に実行されます(< 10 ms)が、リモートプリンターがデフォルトプリンターに設定されている場合、リモートプリンターからの用紙サイズの取得に100 ms以上かかることがあるため(ネットワーク環境に依存)、遅くなる場合があります。
ページ区切り線の表示
画面上にページ区切り線を表示するには:
sheet.EnableSettings(WorksheetSettings.View_ShowPageBreaks);
結果:

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

印刷範囲の変更
ワークシートのPrintableRangeプロパティを使用して印刷範囲を変更します。
sheet.PrintableRange = new RangePosition(1, 1, 9, 9);

印刷範囲が用紙サイズより大きい場合、自動的に分割されます。印刷範囲外のセルは印刷されません。
ページング順序の変更
PrintSettings.PageOrderプロパティを使用してページングの方向を変更します。

sheet.PrintSettings.PageOrder = PrintPageOrder.DownThenOver;
ページ設定の変更
ワークシートのPrintSettingsプロパティを使用して用紙設定を変更します。
// change page to landscape
sheet.PrintSettings.Landscape = true;
// set page margins
sheet.PrintSettings.Margins = new PageMargins(5);
例:横向きへの自動ページング

印刷スケーリング
PrintSettingsのPageScalingプロパティを使用して印刷スケーリングを設定できます。
sheet.PrintSettings.PageScaling = 0.7f; // scale to 70%
注意: ページスケーリングが変更されると、ワークシートは自動的に再ページングされます。
ページ区切りの挿入
ページ区切りを挿入するには、ワークシートのRowPageBreaksおよびColumnPageBreaksプロパティを使用します。
// insert page break
sheet.ColumnPageBreaks.Add(5);
スプレッドシートが2ページに分割されます:

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

ページ区切りの変更
ページ区切りのインデックスを変更または移動するには(ユーザーまたはシステムページ区切りを問わず)、以下のメソッドを使用します。
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);
印刷セッション
印刷セッションは、ワークブック全体または指定したワークシートを印刷するために使用されます。ワークブック全体または複数のワークシートを印刷するには、ワークブックインスタンス(コントロール)から印刷セッションを作成します。単一のワークシートを印刷するには、そのワークシートから印刷セッションを作成します。

単一ワークシートの印刷
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();
グリッド線の印刷
デフォルトでは、グリッド線は印刷されません。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 |
| ANSI | ANSI_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プロパティリファレンス
| プロパティ | 型 | デフォルト | 説明 |
|---|---|---|---|
PrinterName | string | null | 出力プリンター名。null = システムデフォルト。 |
PaperName | string | "Letter" | 用紙サイズ名(PaperManager.PaperSizesInchのキー)。 |
PaperWidth | float | 8.5f | 用紙幅(インチ)(PaperNameが"Custom"の場合に使用)。 |
PaperHeight | float | 11f | 用紙高さ(インチ)(PaperNameが"Custom"の場合に使用)。 |
Landscape | bool | false | trueで横向き。 |
Margins | PageMargins | new PageMargins(1f) | ページ余白(インチ)。 |
PageOrder | PrintPageOrder | DownThenOver | ページ順序:DownThenOverまたはOverThenDown。 |
PageScaling | float | 1f | スケール倍率(0.1 -- 4.0)。1f = 100%。 |
ShowGridLines | bool | false | セルのグリッド線を印刷。 |
ShowMargins | bool | false | ページに余白境界マークを描画。 |