今回紹介するのは、UNVELL株式会社製の.NETスプリットシート表計算コンポーネントReoGridです。ReoGridは.NETプラットフォームで動作する、Excelフォーマットと高い互換性を持つ表計算コンポーネントです。ReoGridを利用すると、Excelのない端末でも、Excelの帳票を.NETアプリケーションの中で手軽に表示、印刷することができます。
ReoGridの入手
ReoGridの公式サイトからダウンロードできます。
ダウンロードしたZIPファイルを解凍すると、以下のようなフォルダーがあります。(筆者のバージョン番号:0.9.0.0)
ReoGrid-0.9.0.0-Beta-ReleasePro | Windows Form用標準機能セット |
ReoGrid-0.9.0.0-Beta-ExtensionPro | Windows Form用拡張機能セット |
ReoGrid-0.9.0.0-Beta-WPFReleasePro | WPF用標準機能セット |
ReoGrid-0.9.0.0-Beta-WPFExtensionPro | WPF用拡張機能セット |
ダウンロードしたZIPパッケージには、解凍すると以下のようなファイルがあります。
ReoGrid-0.9.0.0-Beta-Release | Windows Form用標準機能セットバージョン |
ReoGrid-0.9.0.0-Beta-Extension | Windows Form用拡張機能セットバージョン |
ReoGrid-0.9.0.0-Beta-Minimum | Windows Form用最小機能セットバージョン |
ReoGrid-0.9.0.0-Beta-WPFRelease | WPF用標準機能セットバージョン |
ReoGrid-0.9.0.0-Beta-WPFExtension | WPF用拡張機能セットバージョン |
ReoGrid-0.9.0.0-Beta-WPFMinimum | WPF用最小機能セットバージョン |
ReoGrid-0.9.0.0-Beta-Demo-Binary.zip | Windows Form用デモプログラム実行ファイル |
ReoGrid-0.9.0.0-Beta-Demo-Source.zip | Windows Form用デモプログラムソースコード |
ReoGrid-0.9.0.0-Beta-DemoWPF-Binary.zip | WPF用デモプログラム実行ファイル |
ReoGrid-0.9.0.0-Beta-DemoWPF-Source.zip | WPF用デモプログラムソースコード |
ReoGrid-0.9.0.0-Beta-Editor-Source.zip | ReoGridエディターのソースコード |
ReoGrid-0.9.0.0-Beta-TestCase-Source.zip | テストケースのソースコード |
通常の利用には、Windows FormならReoGrid-version-Release、WPFならReoGrid-version-WPFReleaseが最適です。
ReoGrid のインストール
フォルダーからunvell.ReoGrid.dllファイルを取り出して、.NETプロジェクトの参照設定に追加します。参照追加の後、リストにunvell.ReoGridが表示されます。
Visual Studioのツールボックスの余白で右クリックし、「部品の追加」をクリックします。表示されたダイアログで「.NET Framework コンポーネント」タブを選択し、上記で参照設定に追加したunvell.ReoGrid.DLLを選択します。設定完了の後、ReoGridコントロールはツールボックスの一番下に表示されます。
Excelで領収書を作成する
テンプレートにある2つの領収書を一つ削除します。また会社名などの情報を少し修正します。
修正後のExcelファイルのダウンロードはこちら。
このExcelファイルに、.NETアプリケーション側で宛先、金額、但し書きなどの情報を記入する必要がありますので、あらかじめ書き換えるための枠を用意します。
書き換えたい箇所の範囲を選択し、セルを結合します。
結合したセルを選択したまま、Excel左上にあるアドレスバーで、このセルの名前を指定します。この箇所は宛先のお名前ですので、「onamae」を入力して、Enterを押します。
同じ手順で、この領収書ファイルのすべての書き換えたい箇所に名前を指定します。赤枠線は入力範囲です。
Excelの名前管理の画面で、定義した名前の範囲一覧を確認できます。
画像作成ソフトで簡単な会社印鑑を作成し、Excelファイルに追加します。画像の背景を透明にする必要があります。画像追加の後のイメージです:
加工完了の後、Excelファイルを保存して、Excelを閉じます。名前:領収書006.xlsx
.NETアプリケーションにExcelファイルをリソースとして追加する
Visual Studioで.NETアプリケーションのプロジェクトを開いて、「ソリューションエクスプローラ」で、プロジェクトの名前を選択し、右クリックして「プロパティ」を選択します。右側で「リソース」タブを選択します。
先ほどのExcelファイル「領収書006.xlsx」を選択して、Windowsのエクスプローラから直接リソースの右側の余白にドラッグドロップします。
操作が完了したら下図のようになります。
領収書発行画面を作成する
Visual Studioで新しいWindows Formを新規作成し、ツールボックスからReoGridを選択しFormに配置します。また、宛名、金額、但し書きを入力するためのテキストボックスも用意します。
ソースコードを作成します。MainForm.csを開いて、MainFormのソースコードを編集します。
まず一番上の参照リストに以下を追加します。
using unvell.ReoGrid;
MainFormのクラス構造は以下の通りです。
public partial class MainForm : Form { public MainForm() { InitializeComponent(); } ... }
ワークシートのインスタンスを保持するため、クラス変数を一つ追加します。
private Worksheet worksheet;
OnLoadメソッドを上書きし、ReoGridの初期化処理を行います。Excelの領収書ファイルもここで読み込みます。
protected override void OnLoad(EventArgs e) { base.OnLoad(e); // リソースからExcelファイルを読み取る using (var ms = new System.IO.MemoryStream( WindowsFormsApplication1.Properties.Resources.領収書006)) { reoGridControl1.Load(ms, unvell.ReoGrid.IO.FileFormat.Excel2007); } // シートタブコントロールを隠す reoGridControl1.SetSettings(WorkbookSettings.View_ShowSheetTabControl, false); // スクロールバーを隠す reoGridControl1.SetSettings(WorkbookSettings.View_ShowScrolls, false); worksheet = reoGridControl1.CurrentWorksheet; // ワークシート全体を読み取り専用に設定する worksheet.SetSettings(WorksheetSettings.Edit_Readonly, true); }
実行すると、領収書がFormに表示されます。
今回は一つのワークシートしか利用しないため、シートタブコントロールを非表示に設定しています。また、スクロール機能も使いませんので非表示に設定します。
ユーザーが宛名を入力した場合、リアルタイムで領収書プレビューに反映するように、TextBoxのTextChangedイベントを利用し、TextBoxの入力データをReoGridにコピーします。
txtAtenaのソースコード:
private void txtAtena_TextChanged(object sender, EventArgs e) { var onamae = worksheet.GetNamedRange("onamae"); onamae.Data = txtAtena.Text; }
ここではReoGridのGetNamedRange
メソッドを利用し、Excelで定義した範囲を名前で取得します。範囲が取得できたら、そのDataプロパティにTextBoxの入力値を設定すると読み込んだExcelの領収書の内容を更新できます。
他の3つのTextBoxも同じ処理を行います。ソースコードは以下の通りです。
private void txtKingaku_TextChanged(object sender, EventArgs e) { var kingaku = worksheet.GetNamedRange("kingaku"); kingaku.Data = txtKingaku.Text; } private void txtTadashigaki_TextChanged(object sender, EventArgs e) { var tadashigaki = worksheet.GetNamedRange("tadashigaki"); tadashigaki.Data = txtTadashigaki.Text; } private void txtBiko_TextChanged(object sender, EventArgs e) { var biko = worksheet.GetNamedRange("biko"); biko.Data = txtBiko.Text; }
印刷プレビューと印刷ボタンのソースコードは以下の通りです。
印刷プレビュー:
private void btnPreview_Click(object sender, EventArgs e) { using (var ps = worksheet.CreatePrintSession()) { using (PrintPreviewDialog ppd = new PrintPreviewDialog()) { ppd.Document = ps.PrintDocument; ppd.Bounds = new Rectangle(50, 100, 800, 500); ppd.ShowDialog(); } } }
印刷:
private void btnPrint_Click(object sender, EventArgs e) { if (txtAtena.Text.Length <= 0) { MessageBox.Show("宛名を入力してください。"); } if (txtKingaku.Text.Length <= 0) { MessageBox.Show("金額を入力してください。"); } using (var ps = worksheet.CreatePrintSession()) { ps.Print(); } }
印刷プレビューボタンがクリックされた場合、以下のようなプレビュー画面が表示されます。
印刷ボタンがクリックされた場合、システムのデフォルトプリンターで領収書を印刷します。
ReoGridの印刷設定
上の印刷プレビュー画面を見ると、領収書の一部が印刷されていません。この場合、Excelで元のテンプレートや帳票のサイズを編集します。または、ReoGridで印刷出力の設定を変更します。
印刷用紙の方向を横に設定する
先ほどのOnLoad
メソッドの一番最後に、以下のようなコードを追加します。
protected override void OnLoad(EventArgs e) { base.OnLoad(e); ... // 印刷用紙の方向を横にする worksheet.PrintSettings.Landscape = true; }
もう一度印刷プレビューを確認すると、きちんと印刷出力ができました。
ダウンロード
Excel領収書ファイル: 領収書006.xlsx
ソースコード一式: こちら
※ソリューションを開くため、Visual Studio 2012またはそれ以上が必要です
今後の改善
ReoGridでは、Excelの領収書を表示した状態で直接編集することもできます。そのため、編集できると編集できないセルを指定したり、入力制御を行ったほうがよいでしょう。たとえば金額の入力は数字のみに制限したり、入力が長すぎるとメッセージを表示したりします。いわゆるExcelと同じ見たままが得られる「WYSIWYG」のような操作感をエンドユーザーに提供することができます。
ReoGridについて
今回利用しているライブラリReoGridは、UNVELL株式会社が開発した.NET アプリケーション用のスプリットシートコンポーネントです。Excelファイルをそのまま読み込む、画面に表示することができます。さらに印刷も簡単にでき、手軽にExcelライクのアプリケーションを作成することができます。
ReoGridは多様なセル型をサポートし、高度なカスタマイズ機能も備えているようなので、様々なアプリケーションに柔軟に対応できます。計算式、拡張関数、スクリプト言語の実行などのプロ向けの機能も搭載されていまるため、業務や要件の複雑なアプリケーションにも問題なく対応します。何よりも、これほど高機能を満載しているのに動作パフォーマンスも優秀で、他の似たようなコンポーネントよりも高速です。今後の投稿で色々とほかの機能も紹介したいと思います。
ご不明点がありましたら、どうぞお気軽でご連絡ください。
最後までお読みいただきありがとうございました。