ページングと印刷

自動ページング

ワークシートを印刷する前に、ワークシートを用紙のサイズによってページングする必要があります。ReoGrid はワークシートのページングを自動的に行います。 108

ページングをする際に、縦優先と横優先の二つの方法でページングできます。

自動ページングは、用紙のサイズによって各ページに印刷できるセルの範囲を決めます。セルの一部が用紙の外に出てしまう場合、そのセルが次のページに印刷されます。

例えば以下の例では、赤い罫線が用紙のサイズ、D 列セルの一部が赤い罫線の外に出てしまったため、最終的に Page 1 の有効印刷範囲は青い罫線の部分となります。 109

手動ページング

自動ページングの後、画面での操作またはプログラムで手動ページングを実行できます。手動ページングで自動ページングの結果を編集できます。指定した位置で改ページの挿入、移動、及び削除もできます。

自動ページングのやり直しと手動ページングのリセット

自動ページングをもう一度行いたい場合、または手動ページングをリセットしたい場合、以下のメソッドを呼び出します。

sheet.AutoSplitPage();

このメソッドは単体で高速に動作するよう設計しています(平均動作時間は 10ms 以下)。ただし、Windows 環境のプリンター設定によって動作スピードが落ちる場合があります。特に遠隔プリンターがデフォルトプリンターに設定されている場合動作スピードが200ms程度まで落ちることがあります。

ページングした結果の表示

ページングした結果を画面に表示したい場合、ワークシートの設定 WorksheetSettings.View_ShowPageBreakstrue に設定します。

sheet.SetSettings(WorksheetSettings.View_ShowPageBreaks, true);

120

ページングした結果を非表示にしたい場合、WorksheetSettings.View_ShowPageBreaksfalse に設定します。

sheet.SetSettings(WorksheetSettings.View_ShowPageBreaks, false);

印刷範囲境界の自動検出

ワークシートの PrintableRange を利用して印刷範囲を指定できます。印刷範囲を指定しない場合、ReoGrid はワークシートにある内容の境界を検出し印刷範囲を自動的に設定します。

例えば K11 セルに「A」のテキストがある場合、このワークシートの印刷範囲は A1:K11 となります。 121

印刷範囲の指定

ワークシートのプロパティ PrintableRange を利用して印刷範囲を指定できます。

sheet.PrintableRange = new RangePosition("B2:J10");

印刷範囲を B2:J10 に設定したため、K11 セルのテキスト「A」が印刷されません。 122

ページングの方向

ReoGrid では縦優先と横優先、二つの優先方向でページングできます。

  • 縦優先(Down, then over)-まず縦方向にページングし、次に横に移動して再び縦方向にページングする
  • 横優先(Over, then down)-まず横方向にページングし、次に下に移動して再び横方向にページングする

112

ページング方向の設定には、以下のコードを利用します。PrintPageOrder はページング方向の列挙体です。

sheet.PrintSettings.PageOrder = PrintPageOrder.DownThenOver;

用紙設定

ワークシートの PrintSettings プロパティは用紙設定のためのオブジェクトです。

// 用紙を横向きに設定
sheet.PrintSettings.Landscape = true;

// 用紙の余白を設定
sheet.PrintSettings.Margins = new PageMargins(5);

用紙を横向きに設定するとセル K11 が印刷範囲の中に入ります。

123

印刷の拡大縮小

印刷の拡大縮小を設定するには、PrintSettings プロパティの PageScaling を0.1~4の小数に設定します。1に設定すると元のサイズになります。

sheet.PrintSettings.PageScaling = 0.7f;     // 70%に縮小

印刷の拡大縮小を変更した場合、1ページあたりに印刷可能なセル数が変化しますので、自動ページングが自動的に行われます。

改ページの挿入

自動または手動ページングした結果が RowPageBreaks (行の改ページ配列)と ColumnPageBreaks (列の改ページ配列)に保存されます。

改ページを挿入するには、RowPageBreaks または ColumnPageBreaks 配列の Add メソッドを利用します。

// 5列目の後に改ページを挿入
sheet.ColumnPageBreaks.Add(5);

124

自動ページングと手動ページングの表示

自動ページングした結果が破線で表示されます。手動ページングした結果は実線で表示されます。

125

改ページの移動

改ページを移動したい場合、ワークシートの ChangeRowPageBreak と ChangeRowPageBreak メソッドを利用します。この二つのメソッドの定義は以下の通りです。

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

一つ目のパラメータが移動元のインデックス、二つ目のパラメータが移動先のインデックスです。

移動元は、自動ページングと手動ページングの両方の結果に指定できます。

改ページの削除

改ページを削除したい場合、RowPageBreaks または ColumnPageBreaks 配列の Remove メソッドを利用します。

全てのページを反復

ワークシートの IteratePrintPage メソッドを利用して全てのページを反復できます。反復子は各ページにおける印刷範囲のオブジェクトです。

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 => { ... });

ページング方向を省略した場合、印刷設定のページング方向で反復します。

画面での改ページ編集を禁止する

画面での改ページの編集を禁止したい場合、ワークシートの設定 WorksheetSettings.Behavior_AllowUserChangingPageBreaksfalse に設定します。

sheet.SetSettings(WorksheetSettings.Behavior_AllowUserChangingPageBreaks, false);

印刷セッション

印刷を実行するには印刷セッションを作成します。

263

単一のワークシートを印刷

ワークシートの CreatePrintSession メソッドを利用して印刷セッションを作成します。印刷セッションの Print メソッドを呼び出してワークシートをプリンターに出力します。

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

全てのワークシートを一斉に印刷する

ワークブック(ReoGrid コンポーネント)の CreatePrintSession メソッドを利用して印刷セッションを作成します。印刷セッションの Print メソッドを呼び出してワークブックをプリンターに出力します。

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

指定した複数のワークシートを印刷する

手順は以下の通りです。

  1. ワークブック(ReoGrid コンポーネント)の CreatePrintSession メソッドを利用して印刷セッションを作成します。
  2. 印刷セッションの Worksheets 配列に指定したワークシートを追加します。
  3. 印刷セッションの Print メソッドを呼び出して指定したワークシートをプリンターに出力します。

ソースコードは以下の通りです。

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

印刷プレビュー

.NET フレームワークに搭載されている印刷プレビューダイアログで印刷プレビューを表示できます。

ja62

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);
  }
}

システムの印刷画面でプリンターを選択して印刷する

システムの印刷画面を表示して、プリンターを選択して印刷を実行できます。 ja60

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();

システムの用紙設定画面でワークシートの用紙設定を編集する

システムの用紙設定画面を表示し、その設定結果をワークシートの用紙設定に反映できます。

ja61

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);
  }
}

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