Skip to main content

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

今回紹介するのは、unvell製の.NETスプリットシート表計算コンポーネントReoGridです。ReoGridは.NETプラットフォームで動作する、Excelフォーマットと高い互換性を持つ表計算コンポーネントです。ReoGridを利用すると、Excelのない端末でも、Excelの帳票を.NETアプリケーションの中で手軽に表示、印刷することができます。ReoGridは無償版と有償版があり、無償版では一部の機能しか対応していません。今回ではReoGridの有償版を利用して紹介をしたいと思います。

ReoGridの入手

有償版は、ReoGridのメーカーunvellの公式サイトから購入できます。購入完了の後、公式サイトにログインしてReoGrid 有償版(Pro-edition)をダウンロードします。

ダウンロードした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用拡張機能セット

今回は標準機能で十分ですので、ReoGrid-0.9.0.0-Beta-ReleaseProを利用します。

ちなみに無償版は公式サイトから誰でも、メールアドレスのみの登録でダウンロードできます。ダウンロードページのURLは:https://reogrid.net/jp/download

ダウンロードした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

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

step-035

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

step-04

ReoGridの無償版は、この追加した画像の処理機能に対応していないため、.NETアプリケーションでのExcelファイルを表示する際に、画像が表示されません。また、印刷と再保存の際も出力されません。画像対応のExcelファイルを利用したい場合、有償版のReoGridの購入をお勧めします。

加工完了の後、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

ソースコード一式のダウンロードはこちら

  • ReoGrid有償版を利用しているため、そのままコンパイラできません
  • ソリューションを開くため、Visual Studio 2012またはそれ以上が必要です

今後の改善

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

step-17

ReoGridについて

unvell製ReoGridはExcelファイルを認識し、画面に表示できます。さらにプリンターにも簡単に出力することができ、加工したExcelファイルの再保存もできます。このような機能を活用し、Excel+プログラムで様々な業務アプリケーションを手軽に作成することが可能になります。また、ReoGridは多様なセル型をサポートし、ボタン、ラジオボタン、チェックボックス、ドロップダウンなどの部品も簡単に追加することができ、より豊かな表現と細かな入力制御ができます。計算式、拡張関数、スクリプト言語の実行などの高度な機能も搭載されていますので、業務や要件の複雑なアプリケーションにも対応しています。これらの機能を今後の投稿で紹介したいと思います。

ご不明点がありましたら、どうぞお気軽でご連絡ください。(jing at necotech.org)

またはReoGridメーカーの公式サポート窓口: https://www.unvell.com/jp/contact/

以上。




Jing

撮影に興味を持つ猫と電子工作が大好きプログラム歴が17年のIT技術者。

Leave a Reply

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