SHOEISHA iD

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

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

ComponentZine(PlusPak)

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

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

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

 今回は、Excelのワークシートに入力されている商品の管理番号からバーコードを作成し、それをExcelのワークシートに添付していくアプリケーションを作成しました。

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

はじめに

 前回紹介したバーコードを作成するプログラムが、思ったより注目を浴びたようなので、調子に乗って第二弾を作ることにしました。今回は、Excelのワークシートに入力されている商品の管理番号からバーコードを作成し、それをExcelのワークシートに添付していくアプリケーションとなっています。

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」です。

アセンブリ名が「GrapeCity.Win.PlusPak」で始まる「GcBarCode」コントロールを選択する
アセンブリ名が「GrapeCity.Win.PlusPak」で始まる「GcBarCode」コントロールを選択する

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

 以上でできあがりです。

コード全文

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コンポーネントはバーコード作成アプリケーションの開発に大きな威力を発揮してくれると思います。

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

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

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

この記事をシェア

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

イベント

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

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

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

メールバックナンバー

アクセスランキング

アクセスランキング