はじめに
前回紹介したバーコードを作成するプログラムが、思ったより注目を浴びたようなので、調子に乗って第二弾を作ることにしました。今回は、Excelのワークシートに入力されている商品の管理番号からバーコードを作成し、それをExcelのワークシートに添付していくアプリケーションとなっています。
使用するコンポーネントは、PlusPak for Windows Forms 5.0JのGcBarCodeコンポーネントで、今度はCode39というバーコードのフォーマットを使用し、アルファベットが入った数字データからバーコードを作成します。Excelデータの読み込みは、VBおよびC#からExcelを呼び出して操作します。
なお、Excelの各オブジェクトおよび所属するメソッド、プロパティ等はVisual Basic for Applications(VBA)によって操作するように作られているため、Visual Basicから操作する場合は何ら問題にならないのですが、C#でこれらのオブジェクトを操作する場合は、プロパティやメソッドのパラメータの受け渡し、省略可能なパラメータの使い方、パラメータ化されたプロパティの使い方などで、そのままコーディングするとエラーになるという問題が発生します。
エラーを回避するための処理はあるのですが、コードがかなり煩雑になったり、VBでは簡単にできるプロパティのパラメータに変数を当てる使うコードなどは複雑なコードにならざるを得ない、という点から、今回はVisual Basicのみのコードの紹介とします。
対象読者
Visual Basic 2005・2008を使ってプログラムを作ったことのある人。
必要な環境
Visual Basic 2005、2008、Visual Studio 2005、2008でプログラムが作れる環境。なお、本プログラムはWindows Vista上で動作するVisual Studio 2005を使用して作成し、動作確認を行っています。
プログラム実行時の注意事項
PlusPak for Windows Forms 5.0Jを使って作成したアプリケーションを配布する場合、PlusPak for Windows Forms 5.0Jのアセンブリファイルを添付する必要があります。これは、Common Language RuntimeのDLLをアプリケーションと一緒に配布するのと同じです。
本記事のサンプルアプリケーションを正常に動作させるためには、次の4ファイルをインストールする必要があります。
ファイル名 | 説明 |
---|---|
GrapeCity.Win.PlusPak.v50.dll | 本体コンポーネント |
GrapeCity.Framework.PlusPak.v20.dll | 製品のフレームワーク |
GrapeCity.Win.PlusPak.v50.resources.dll | 本体コンポーネントのサテライトリソース |
GrapeCity.Framework.PlusPak.v20.resources.dll | 製品フレームワークのサテライトリソース |
これらのファイルを、プログラムを実行するBinフォルダに格納します。 .NET Framework 2.0から追加されたクラスやメンバを使用しているので、.NET Framework 2.0がインストールされていることが必須条件です。また、使用しているコンピュータに次のフォルダを作成し、同梱してあるExcelのデータブックをそこにコピーしてください。
c:\barcode
なお、プログラムを実行するには、使用しているコンピュータにExcel 2003または2007がインストールされている必要があります。
コントロールのインストール
はじめてPlusPak for Windows Forms 5.0Jを使用する方は、Visual Studio、Visual Basicの開発環境にPlusPak for Windows Forms 5.0Jをインストールする必要があります。インストーラは、グレープシティのWebページからダウンロードできます。
ユーザー情報を登録すると送られてくるメールに、ダウンロード用のURLが記載されているので、 ここからダウンロードしてインストールしてください。ファイルはzip形式で圧縮されています。有償のコントロールですが、プロダクトキーを入力せずにインストールすることでトライアル版として使用できます。制限事項などの詳細については、インストーラに同梱されているリリースノートを参照ください。
コントロールの追加
PlusPak for Windows Forms 5.0Jをインストールしたら、ツールボックスに専用のタブを作成し、使用するコントロールを追加します。追加するコントロールは、「.NET Frameworkコントロール」のアセンブリ名が「GrapeCity.Win.PlusPak」で始まるコントロール「GcBarCode」です。
GUIのデザイン
今回作成するGUIはとても簡単で、ボタンとGcBarCodeコンポーネントだけです。処理のほとんどはコードで行います。

GcBarCodeコンポーネントについて
GcBarCodeコンポーネントについては、前回の記事「バーコード作成.NETアプリケーションを作る」を参照ください。
今回は、バーコード作成のデータに、数字だけではなくアルファベットも使えるように、Code39(FullAscii)を使います。このバーコードは、アルファベットもバーコード化するため、前回使用した「JAN13」よりも細かなバーの並びになります。

コードの作成
今回はExcelを使うので、Excel VBAの知識があると記事を理解しやすいと思いますが、Excel VBAについてあまり詳しくない方もいますので、その辺も少し解説していきます。このプログラムは次のように動作します。
- Excelを起動し、ワークシートに入力されているデータを取り出します。
- このデータをつなげて、GcBarCodeコンポーネントのValueプロパティに渡し、CreateBitmapメソッドを使用して、バーコード画像を作成します。
- この処理を「空白のセルに出会うまで」という条件で、Whileステートメントを使用してデータの数だけ繰り返します。
- 作成したすべてのバーコード画像を別のワークシートに貼り付けます。そして「通常使うプリンタ」に出力して印刷します。
- ブックを保存して閉じ、Excelを終了します。
メインの処理
最初に、ボタンのClickイベントハンドラで、全体の処理を作成します。データの読み込みとバーコードの印刷はそれぞれ、引数付きのSubプロシージャを作成し、呼び出して使うようにします。
まずはじめに、Excelへの参照設定を行います。ソリューションエクスプローラで、プロジェクト名の上でマウスの右ボタンを押し表示されるショートカットメニューから、「参照の追加」を選びます。そして、「.NET」タブページのコンポーネント名リストから、「Microsoft.Office.Interop.Excel」を選びます。バージョン11がExcel 2003、バージョン12がExcel 2007です。これで、Visual Basicのコードで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() End With End Sub
以上でできあがりです。
コード全文
Imports GrapeCity.Win.BarCode Public Class Form1 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim xl As New Microsoft.Office.Interop.Excel.Application() 'xl.Visible = True read_data(xl) print_barcode(xl) xl.ActiveWorkbook.Save() xl.ActiveWorkbook.Close() xl.Quit() End Sub Private icount As Integer = 0 Sub read_data(ByVal xl As Microsoft.Office.Interop.Excel.Application) Dim fname As String Dim imgBarcode1 As Image Dim i As Integer = 2 Dim data As String xl.Workbooks.Open("C:\barcode\バーコードデータ.xls") With xl.ActiveWorkbook.Worksheets("Sheet1") While .cells(i, 1).value <> "" icount += 1 data = .cells(i, 1).value & .cells(i, 2).value & .cells(i, 3).value With GcBarCode1 .Type = GrapeCity.Win.BarCode.ValueType.BarType.Code39 .Value = data End With 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 Sub print_barcode(ByVal xl As Microsoft.Office.Interop.Excel.Application) Dim i As Integer 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() MessageBox.Show("バーコードを印刷しました。", "完了") End With End Sub End Class
まとめ
前回のフォームからバーコード番号を作成するアプリケーションと、今回のExcelのワークシートからバーコードを作成するアプリケーションの、2つのタイプのアプリケーションを作ってみました。バーコードで管理しようとする物は、たいてい量が多いものですから、バーコード作成を自動化する場合も結構あるのではないかと思います。
今回は、簡単なサンプルでバーコード作成を自動化しましたが、実際に利用しようとする現場では、もう少し大がかりな処理を組み立てることになるのではないでしょうか。いずれにしても、GcBarCodeコンポーネントはバーコード作成アプリケーションの開発に大きな威力を発揮してくれると思います。