はじめに
2026 年 10 月 16 日に ReoGrid 4.6 をリリースしました。4.6 は出力を強化したリリースです。ワークシートを PDF ファイルに直接書き出せるようになり、印刷したページには業務帳票に欠かせないヘッダー・フッターやページの収め方が反映されます。グリッドでは、セル内エディタがリッチテキストを編集できるようになり、セルの中の 1 語だけを太字にするといった操作がそのまま行えます。
ReoGrid V4 は、同じライセンスでご利用いただける ReoGrid One V5 と並んで、今後も継続して販売・サポートいたします。本記事では 4.6 の主な新機能をご紹介します。
主要なポイント
- PDF 出力(WinForms): 1 回の呼び出しで、ワークシートまたはブック全体を PDF に書き出し。改ページは印刷と同じ
- リッチテキストのセル内エディタ(WinForms / WPF): 編集中に文字の一部を選んで、太字・斜体・文字色・サイズを設定
- ヘッダー・フッターの印刷: ページ番号・総ページ数・日付・シート名。先頭ページだけ別、奇数・偶数ページ別にも対応
- ページ数に合わせて印刷・中央揃え: Excel の「次のページ数に合わせて印刷」と、ページ中央への配置。印刷と PDF の両方に反映
- XLSX のページ設定の読み書き: 用紙サイズ・倍率・ページ数に合わせる設定・中央揃え・印刷範囲を Excel ファイルと相互にやり取り
- 開発端末のライセンス認証: 新たに発行する Professional のキーが対象。お持ちのキーはそのままお使いいただけます
PDF 出力
PDFExporter.Export で、ワークシート(複数のシートを 1 つの文書にすることも可能)を PDF ファイルまたはストリームに書き出せます。
using unvell.ReoGrid.PDF;
// ワークシート 1 枚
PDFExporter.Export(reoGridControl.CurrentWorksheet, @"C:\Reports\sales.pdf");
// ブック全体(シートの順に続けて出力)
PDFExporter.Export(reoGridControl.Worksheets, @"C:\Reports\book.pdf");
// メモリへ(メールの添付ファイルなどに)
using var ms = new MemoryStream();
PDFExporter.Export(reoGridControl.CurrentWorksheet, ms);
PDF は印刷と同じ規則でページに分けて出力します。改ページ・用紙サイズ・余白・倍率・ページの順序・ヘッダーとフッターがそのまま反映されるため、印刷の 1 ページが PDF の 1 ページになり、プリンターで印刷したものと同じ仕上がりになります。
- 拡大しても鮮明: セル・罫線・文字をベクターと文字データのまま書き出すので、PDF 内の文字は検索でき、選択してコピーできます
- 小さなファイル: 文書で使った文字だけを埋め込みます。日本語フォントを含めても、増えるのは数 MB ではなく数十 KB です。セルのフォントにない文字は、画面と同じく日本語を表示できるフォントで描きます
- 出力する内容: セルの塗りつぶし、すべての罫線の種類、セルの文字(回転した文字、禁則処理つきの折り返しや改行を含む文字)、行・列の見出し、画像
- ReoGrid に内蔵: PDF 出力に必要な機能は ReoGrid に搭載されているため、追加のライブラリを使わずに出力を完結できます。製品は従来どおり DLL 1 つです
PDF 出力は印刷と同様に有効なライセンスキーが必要で、未設定の場合は InvalidOperationException を投げます。
サーバーで PDF を作りたい場合 —
PDFExporterは WinForms 版の機能です。ASP.NET Core のサービスやバッチ処理、Linux のコンテナなど、画面を持たない環境で PDF を出力するには、同じライセンスでご利用いただける ReoGrid One V5 をお使いください。
リッチテキストのセル内エディタ
セルの編集に使っていたテキストボックスを、セルのリッチテキストを直接編集できるエディタに置き換えました。
- 編集中に文字の一部を選んで Ctrl+B / Ctrl+I / Ctrl+U を押すか、アプリのツールバーから太字・斜体・下線・取り消し線・フォント・サイズ・文字色を設定できます
- 書式が混在する内容は
RichTextとして保存し、全体が同じ書式の内容は通常の文字列とセルのスタイルとして保存します(Excel と同じ) - エディタは内容に合わせて広がり、中央揃え・右揃えに追従し、ダブルクリックで単語を選択します(そのままドラッグすると単語単位で選択を広げます)。IME の変換ウィンドウはキャレットの位置に表示します
- 数式の編集中は、式の中の各参照を、グリッド上の枠と同じ色で色分けします。4.5 で追加した数式のポイントモード編集も、新しいエディタでそのまま使えます
ツールバーのボタンを、セルの編集中は選択した文字に、それ以外は選択したセルに書式を適用するように作るには、先に ApplyStyleToEditingTextSelection を呼びます。
using unvell.ReoGrid;
using unvell.ReoGrid.Actions;
private void ApplyTextStyle(WorksheetRangeStyle style)
{
var sheet = reoGridControl.CurrentWorksheet;
// true: セル内エディタで選択している文字に適用した
if (sheet.ApplyStyleToEditingTextSelection(style)) return;
// それ以外はセルに適用する
reoGridControl.DoAction(new SetRangeStyleAction(sheet.SelectionRange, style));
}
private void boldButton_Click(object sender, EventArgs e)
{
ApplyTextStyle(new WorksheetRangeStyle
{
Flag = PlainStyleFlag.FontStyleBold,
Bold = boldButton.Checked,
});
}
ApplyStyleToEditingTextSelection は、書式が文字の一部ではなくセル全体に属する場合に false を返します。編集していないとき、文字を選択していないとき、同じ書式の文字をすべて選択しているとき、数式のときがこれに当たります。書式を変えても編集は続き、カラーピッカーのようなツールバーのドロップダウンにフォーカスがある間も同じです。
印刷: ヘッダーとフッター
印刷セッションで印刷したページ(WinForms の印刷と印刷プレビュー)と PDF に出力したページに、ワークシートのヘッダーとフッターが入るようになりました。書式は Excel の書式コードで、XLSX ファイルとの間で読み書きできます。
var sheet = reoGridControl.CurrentWorksheet;
// 左に「月次レポート」、右に「2 / 5 ページ」
sheet.HeaderFooter.OddHeader = "&L月次レポート&R&P / &N ページ";
// 中央にシート名
sheet.HeaderFooter.OddFooter = "&C&A";
// 先頭ページだけ別のヘッダー
sheet.HeaderFooter.DifferentFirst = true;
sheet.HeaderFooter.FirstHeader = "&C四半期 売上報告書";
| コード | 印刷される内容 |
|---|---|
&L / &C / &R | 左 / 中央 / 右のセクションを開始 |
&P / &N | ページ番号 / 総ページ数 |
&D / &T | 日付 / 時刻 |
&A | シート名 |
&& | 文字としての & |
用紙の端からヘッダー・フッターまでの距離は PrintSettings.HeaderMargin と FooterMargin(インチ単位、既定は Excel と同じ 0.3)で指定します。奇数・偶数ページ別(DifferentOddEven)、ページの倍率に合わせる(ScaleWithDocument)、余白に合わせる(AlignWithMargins)の設定にも対応しています。
ヘッダーとフッターは、シートの既定のフォントで 1 行に、黒で印刷します。テキスト内の Excel のフォント・サイズ・色の指定は読み飛ばし、ヘッダーの画像(&G)は印刷しません。
印刷: ページ数に合わせて印刷・中央揃え
PrintSettings.FitToPage は、Excel の「次のページ数に合わせて印刷」と同じく、印刷範囲を指定したページ数に収めます。縮小だけを行い、もともと収まるシートは 100% のまま印刷します。
var ps = sheet.PrintSettings;
// 横 1 ページ、縦は必要なだけ
ps.FitToPage = true;
ps.FitToPagesWide = 1;
ps.FitToPagesTall = 0; // 0 = その方向は制限なし
// 各ページの内容を左右中央に配置
ps.CenterHorizontally = true;
// 新しい設定で改ページを計算し直す
sheet.AutoSplitPage();
どちらの設定も、WinForms の印刷・印刷プレビューと PDF 出力に反映されます。Excel と同じく、ページ数に合わせる設定では手動の改ページを使いません。
XLSX のページ設定の読み書き
Excel ファイルのページ設定を読み込み、保存できるようになりました。対象は用紙サイズ・倍率・ページ数に合わせる設定・ページの順序・中央揃え・枠線の印刷・印刷範囲で、ヘッダー・フッターとページの余白も同様です。
4.6 より前は、ファイルの設定にかかわらず Letter 用紙・100%・使用範囲全体で印刷していたほか、縦向きのシートを横向きとして読み込み、ヘッダー・フッターと余白は保存すると失われていました。Excel で印刷用に整えたブックを、アプリからも設計どおりに印刷できます。
その他の修正
- 印刷: セルの文字の最後の 1 文字が欠ける問題を修正し、折り返す文字は Excel と同じくセルの幅で折り返すようにしました
- 印刷 / PDF: 100% 以外の倍率で印刷・印刷プレビュー・PDF 出力をした後も、画面上の画像や図形の位置がずれなくなりました
- リッチテキスト: リッチテキストのセルを高速に描画し、文字の間隔を通常のセルの同じ文字と揃えました(WinForms)
- ライセンス: タイの仏暦のようなグレゴリオ暦以外の暦を使う環境でも、トライアルキーの期限を正しく読み取り、タイムゾーンによって期限がずれないようにしました
動作の変更
- WinForms・WPF とも、テキストボックスのエディタをリッチテキストのエディタに置き換えました。エディタ内での Ctrl+Z(テキストボックスが持っていた 1 段階の元に戻す)は、現時点では未対応です。ロードマップに載せています
- WPF では、エディタを UI オートメーションに対してテキストボックスとして公開しなくなりました。旧エディタに文字を入力していた UI の自動テストは調整が必要です
4.5 以降の追加: シートの読み込み方を選べるように(4.5.1)
7 月にリリースした 4.5.1 で、複数シートの XLSX ファイルの読み込み方を選べるようにしました。
// 既定: Load の中ですべてのシートを読み込む(4.4 以前と同じ)
reoGridControl.WorksheetLoadStrategy = WorksheetLoadStrategy.LoadAll;
// アクティブなシートだけを先に読み込み、ほかは最初に開いたときに読み込む
reoGridControl.WorksheetLoadStrategy = WorksheetLoadStrategy.DelayLoad;
// DelayLoad に加えて、残りのシートをバックグラウンドで先読みする
reoGridControl.WorksheetLoadStrategy = WorksheetLoadStrategy.BackgroundDelayLoad;
reoGridControl.Load(@"C:\Data\book.xlsx");
Load を呼ぶ前に設定してください。BackgroundDelayLoad は、大きなブックを DelayLoad と同じ速さで開きつつ、タブを切り替えたときには多くの場合シートの読み込みが済んでいます。
ライセンス: 開発端末のライセンス認証
4.6 から、新たに発行する Professional のライセンスキーは、1 本につき開発端末 1 台に割り当てます。お持ちのライセンスキーはそのままお使いいただけます。
- 開発環境で ReoGrid を実行するには、ライセンスキーによる認証が必要です。ライセンスキーはカスタマーポータルからダウンロードできます
- 開発したアプリケーションはこの認証の対象外です。配布先のお客様の環境では、これまでどおりに動作します
アップグレード方法
4.6 のアセンブリはカスタマーポータルからダウンロードできます。参照しているアセンブリを新しいバージョンに置き換えてください。お持ちのライセンスキーと ReoGridLicense.SetLicense の呼び出しは、そのままお使いいただけます。
おわりに
ReoGrid 4.6 は、ワークシートを完成した文書 — PDF や、ヘッダー・フッターとページの収め方まで整った印刷物 — として出力できるようにし、Excel と同じ部分的な文字の書式設定をセルの中でそのまま行えるようにしたリリースです。