Skip to main content

.NETで領収書発行のプログラムを簡単に作成する

今回紹介するのは、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が表示されます。

step-09

Visual Studioのツールボックスの余白で右クリックし、「部品の追加」をクリックします。表示されたダイアログで「.NET Framework コンポーネント」タブを選択し、上記で参照設定に追加したunvell.ReoGrid.DLLを選択します。設定完了の後、ReoGridコントロールはツールボックスの一番下に表示されます。

step-10

Excelで領収書を作成する

インターネットで無料テンプレート「領収書006.xlsx」を利用します。ダウンロード元:http://www.bizocean.jp/doc/detail/102733/

テンプレートにある2つの領収書を一つ削除します。また会社名などの情報を少し修正します。

ryushusho-excel

修正後のExcelファイルのダウンロードはこちら

このExcelファイルに、.NETアプリケーション側で宛先、金額、但し書きなどの情報を記入する必要がありますので、あらかじめ書き換えるための枠を用意します。

書き換えたい箇所の範囲を選択し、セルを結合します。

step-01

結合したセルを選択したまま、Excel左上にあるアドレスバーで、このセルの名前を指定します。この箇所は宛先のお名前ですので、「onamae」を入力して、Enterを押します。

step-02

同じ手順で、この領収書ファイルのすべての書き換えたい箇所に名前を指定します。赤枠線は入力範囲です。

step-03

Excelの名前管理の画面で、定義した名前の範囲一覧を確認できます。

step-035

画像作成ソフトで簡単な会社印鑑を作成し、Excelファイルに追加します。画像の背景を透明にする必要があります。画像追加の後のイメージです:

step-04

加工完了の後、Excelファイルを保存して、Excelを閉じます。名前:領収書006.xlsx

.NETアプリケーションにExcelファイルをリソースとして追加する

Visual Studioで.NETアプリケーションのプロジェクトを開いて、「ソリューションエクスプローラ」で、プロジェクトの名前を選択し、右クリックして「プロパティ」を選択します。右側で「リソース」タブを選択します。

step-05

先ほどのExcelファイル「領収書006.xlsx」を選択して、Windowsのエクスプローラから直接リソースの右側の余白にドラッグドロップします。

step-07

操作が完了したら下図のようになります。

step-08

領収書発行画面を作成する

Visual Studioで新しいWindows Formを新規作成し、ツールボックスからReoGridを選択しFormに配置します。また、宛名、金額、但し書きを入力するためのテキストボックスも用意します。

step-11

ソースコードを作成します。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に表示されます。

step-12

今回は一つのワークシートしか利用しないため、シートタブコントロールを非表示に設定しています。また、スクロール機能も使いませんので非表示に設定します。

ユーザーが宛名を入力した場合、リアルタイムで領収書プレビューに反映するように、TextBoxのTextChangedイベントを利用し、TextBoxの入力データをReoGridにコピーします。

step-13

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

印刷プレビューと印刷ボタンのソースコードは以下の通りです。

step-14

印刷プレビュー:

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

印刷プレビューボタンがクリックされた場合、以下のようなプレビュー画面が表示されます。

step-15

印刷ボタンがクリックされた場合、システムのデフォルトプリンターで領収書を印刷します。

ReoGridの印刷設定

上の印刷プレビュー画面を見ると、領収書の一部が印刷されていません。この場合、Excelで元のテンプレートや帳票のサイズを編集します。または、ReoGridで印刷出力の設定を変更します。

印刷用紙の方向を横に設定する

先ほどのOnLoadメソッドの一番最後に、以下のようなコードを追加します。

protected override void OnLoad(EventArgs e)
{
  base.OnLoad(e);

 ...

  // 印刷用紙の方向を横にする
  worksheet.PrintSettings.Landscape = true;
}

もう一度印刷プレビューを確認すると、きちんと印刷出力ができました。

step-16

ダウンロード

Excel領収書ファイル: 領収書006.xlsx

ソースコード一式: こちら

※ソリューションを開くため、Visual Studio 2012またはそれ以上が必要です

今後の改善

ReoGridでは、Excelの領収書を表示した状態で直接編集することもできます。そのため、編集できると編集できないセルを指定したり、入力制御を行ったほうがよいでしょう。たとえば金額の入力は数字のみに制限したり、入力が長すぎるとメッセージを表示したりします。いわゆるExcelと同じ見たままが得られる「WYSIWYG」のような操作感をエンドユーザーに提供することができます。

step-17

ReoGridについて

今回利用しているライブラリReoGridは、UNVELL株式会社が開発した.NET アプリケーション用のスプリットシートコンポーネントです。Excelファイルをそのまま読み込む、画面に表示することができます。さらに印刷も簡単にでき、手軽にExcelライクのアプリケーションを作成することができます。

ReoGridは多様なセル型をサポートし、高度なカスタマイズ機能も備えているようなので、様々なアプリケーションに柔軟に対応できます。計算式、拡張関数、スクリプト言語の実行などのプロ向けの機能も搭載されていまるため、業務や要件の複雑なアプリケーションにも問題なく対応します。何よりも、これほど高機能を満載しているのに動作パフォーマンスも優秀で、他の似たようなコンポーネントよりも高速です。今後の投稿で色々とほかの機能も紹介したいと思います。

ご不明点がありましたら、どうぞお気軽でご連絡ください。
最後までお読みいただきありがとうございました。

Jingwood

北海道の田舎で暮らしているプログラマーです。最近山登りにハマりました。

Leave a Reply

Your email address will not be published. Required fields are marked *