SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

ComponentZine(PlusPak)

Excelのデータからバーコードを生成する.NETアプリケーションを作る

PlusPak for Windows Forms 5.0JのGcBarCodeコンポーネントを使ったアプリケーションの作成 その2

  • このエントリーをはてなブックマークに追加

GUIのデザイン

 今回作成するGUIはとても簡単で、ボタンとGcBarCodeコンポーネントだけです。処理のほとんどはコードで行います。

GUIの画面
GUIの画面

GcBarCodeコンポーネントについて

 GcBarCodeコンポーネントについては、前回の記事「バーコード作成.NETアプリケーションを作る」を参照ください。

 今回は、バーコード作成のデータに、数字だけではなくアルファベットも使えるように、Code39(FullAscii)を使います。このバーコードは、アルファベットもバーコード化するため、前回使用した「JAN13」よりも細かなバーの並びになります。

作成するバーコード
作成するバーコード

コードの作成

 今回はExcelを使うので、Excel VBAの知識があると記事を理解しやすいと思いますが、Excel VBAについてあまり詳しくない方もいますので、その辺も少し解説していきます。このプログラムは次のように動作します。

  1. Excelを起動し、ワークシートに入力されているデータを取り出します。
  2. このデータをつなげて、GcBarCodeコンポーネントのValueプロパティに渡し、CreateBitmapメソッドを使用して、バーコード画像を作成します。
  3. この処理を「空白のセルに出会うまで」という条件で、Whileステートメントを使用してデータの数だけ繰り返します。
  4. 作成したすべてのバーコード画像を別のワークシートに貼り付けます。そして「通常使うプリンタ」に出力して印刷します。
  5. ブックを保存して閉じ、Excelを終了します。

メインの処理

 最初に、ボタンのClickイベントハンドラで、全体の処理を作成します。データの読み込みとバーコードの印刷はそれぞれ、引数付きのSubプロシージャを作成し、呼び出して使うようにします。

 まずはじめに、Excelへの参照設定を行います。ソリューションエクスプローラで、プロジェクト名の上でマウスの右ボタンを押し表示されるショートカットメニューから、「参照の追加」を選びます。そして、「.NET」タブページのコンポーネント名リストから、「Microsoft.Office.Interop.Excel」を選びます。バージョン11がExcel 2003、バージョン12がExcel 2007です。これで、Visual BasicのコードでExcelを操作できるようになります。

Microsoft.Office.Interop.Excelを選ぶ
Microsoft.Office.Interop.Excelを選ぶ

 Excelへの参照は、オブジェクト構造の最上位に位置するオブジェクト「Microsoft.Office.Interop.Excel.Application」を作成し、これを使ってExcel内部のオブジェクトにアクセスしていきます。

Dim xl As New Microsoft.Office.Interop.Excel.Application()

 もし、開発中にExcelの動作を見たいという場合は、ApplicationオブジェクトのVisibleプロパティをTrueにします。このプログラムでは、Excelは一切表示させずに、バックグラウンドの処理として利用します。

'xl.Visible = True

 Excelのインスタンスが作成できたら、これを引数にして2つのSubプロシージャを実行させます。

read_data(xl)
print_barcode(xl)

 処理が終了したら、ブックを保存して閉じ、Excelそのものを終了させます。

xl.ActiveWorkbook.Save()
xl.ActiveWorkbook.Close()
xl.Quit()

データの読み込み処理

 バーコード化するデータの読み込み処理を作成します。これは、独自のSubプロシージャ「read_data」を作って記述します。引数は1つで、Excelのインスタンスへの参照を指定します。

Sub read_data(ByVal xl As Microsoft.Office.Interop.Excel.Application)

 バーコードのデータがあるブックを開くには、WorkbooksコレクションオブジェクトのOpenメソッドを使用します。引数は、開くブックのファイル名をフルパスで記述します。

xl.Workbooks.Open("C:\barcode\バーコードデータ.xls")

 ブックを開いたら、ワークシート「Sheet1」にあるデータを読み込みます。サンプルブックには10件のデータが3列にわたって入力されています。このデータの読み込みは、Whileステートメントを使って自動化します。ループ処理の条件は、「空白のセルに出会うまで」です。

 セルの参照には、Cellsプロパティを使用します。引数は、「行番号」と「列番号」です。ここでは、行番号に変数を使用し、1行ずつアクセスする行番号を変化させながら、データを順番に取り出していきます。

With xl.ActiveWorkbook.Worksheets("Sheet1")
    While .cells(i, 1).value <> ""
        icount += 1

 そして、3つのセルデータを連結し、バーコード作成データに加工します。

data = .cells(i, 1).value & .cells(i, 2).value & .cells(i, 3).value

 後は、前回の記事で紹介したように、GcBarCode1コンポーネントのValueプロパティに、このデータを設定します。バーコードのタイプは、アルファベットが使えるように、Typeプロパティに「Code39」を指定します。

With GcBarCode1
    .Type = GrapeCity.Win.BarCode.ValueType.BarType.Code39
    .Value = data
End With

 そして、CreateBitmapメソッドでバーコード画像を作成し保存します。

            imgBarcode1 = GcBarCode1.CreateBitmap(120)
            fname = "C:\barcode\BarCode" & icount & ".bmp"
            imgBarcode1.Save(fname, System.Drawing.Imaging.ImageFormat.Bmp)
            i += 1
        End While

        MessageBox.Show("バーコード" & icount & "個を作成しました。", "完了")
    End With
End Sub

バーコードの印刷処理

 バーコード画像ができたら、ワークシートSheet2に貼り付けて印刷します。

 これは、Subプロシージャ「print_barcode」を作って記述します。引数は1つで、Excelのインスタンスへの参照を指定します。

Sub print_barcode(ByVal xl As Microsoft.Office.Interop.Excel.Application)
    Dim i As Integer

 ブックは開いたままになっているので、今度はSheet2をアクティブにし、ここに作成したバーコード画像を貼り付けていきます。これには、PicturesオブジェクトのInsertメソッドを使用します。引数は、画像ファイル名をフルパスで指定します。全部で10個の画像を貼り付けますが、貼り付け位置がずれるように、IncrementTopプロパティを使用しています。

With xl.ActiveWorkbook.Worksheets("Sheet2")
    .Activate()
    .range("A1").Select()
    For i = 1 To 10 'icount
        .Pictures.Insert("C:\barcode\BarCode" & i & ".bmp").select()
        xl.Application.Selection.ShapeRange.IncrementTop(60 * (i - 1))
    Next

 貼り付けが完了したら、PrintOutメソッドを実行してワークシートを印刷します。このメソッドは、「標準で使用するプリンタ」に対して印刷処理を実行します。

※動作テストで印刷を実行しない場合は、PrintOutメソッドをコメントアウトしてください
        .Printout()
    End With
End Sub

 以上でできあがりです。

次のページ
コード全文

この記事は参考になりましたか?

  • このエントリーをはてなブックマークに追加
ComponentZine(PlusPak)連載記事一覧

もっと読む

この記事の著者

瀬戸 遥(セト ハルカ)

8ビットコンピュータの時代からBASICを使い、C言語を独習で学びWindows 3.1のフリーソフトを作成、NiftyServeのフォーラムなどで配布。Excel VBAとVisual Basic関連の解説書を中心に現在まで40冊以上の書籍を出版。近著に、「ExcelユーザーのためのAccess再...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/3388 2009/03/17 12:13

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング