NonSoft

エクセルを使用した帳票印刷のサンプル(VB.NET)


 サンプル(ソース/コード)
<このサンプルの概要>
VB.NETからエクセルを使用して帳票を印刷するサンプルを作ってみました。帳票印刷機能
を簡単に実現したい時に如何でしょうか。このサンプルのキーワードは以下の通りです。
(1)参照の追加(Microsoft Excel *.* Object Library)
(2)Excel.Application
(3)Excel.Workbooks
(4)Excel.Workbook
(5)Excel.Worksheet.PrintOut
(6)Marshal.ReleaseComObject
(7)System.GC.Collect

参照設定しないでエクセルを使用するサンプルはこちらです。
参照設定しないでエクセルを使用するサンプル(VB.NET)

エクセル関係のその他ののサンプルはこちらです。
EXCEL印刷(Worksheet.PrintOut)のサンプル(C#.NET)
エクセルを操作する小技のサンプル(VB.NET)
エクセルを操作する小技のサンプル(C#.NET)
エクセルを起動しいろいろ操作するサンプル(VB6)
エクセルを起動しいろいろ操作するサンプル(VBS)
エクセルへデータをコピーし表示するサンプル(VB6)

★エクセルによる印刷クラス(ExcelPrint.vb)
Option Strict Off

Imports System.Runtime.InteropServices

''' -----------------------------------------------------------------------------
''' エクセルによる帳票印刷クラス
''' -----------------------------------------------------------------------------
Public Class ExcelPrint

    Public _xslFile As String = "c:\temp\Book1.xls"     ' XLSファイル名
    Public _sheetNo As Integer = 1                      ' シートNo.
    Public _col As String = "A"                         ' データ書き込みカラム
    Public _line As String = "1"                        ' データ書き込み開始行
    Public _printer As String = ""                      ' 出力プリンター

    Public _A1 As String = ""                           ' A1
    Public _A2 As String = ""                           ' A2
    Public _A3 As String = ""                           ' A3
    Public _A4 As String = ""                           ' A4
    Public _A5 As String = ""                           ' A5

    ''' -----------------------------------------------------------------------------
    ''' 印刷実行
    ''' -----------------------------------------------------------------------------
    Public Sub Print()
        ' Excel.Applicationを有効にするため参照の追加を行なってください
        ' [参照の追加],[COM],[Microsoft Excel *.* Object Library]
        ' 参照設定に[Excel](ファイル名:Interop.Excel.dll)が追加されます
        Dim objExcel As Excel.Application = Nothing     'ExcelApplication
        Dim objWorkBooks As Excel.Workbooks = Nothing   'ExcelWorkBooks
        Dim objWorkBook As Excel.Workbook = Nothing     'ExcelWorkbook

        Try
            'EXCEL開始処理
            Try
                objExcel = New Excel.Application
            Catch ex As Exception
                Throw New Exception( _
                    "Microsoft Office Excelがインストールされていないため" & vbCrLf & _
                    "印刷できません。")
            End Try

            If Dir(_xslFile) = "" Then
                Throw New Exception( _
                    "エクセルファイルが見つかりませんでした。" & vbCrLf & _xslFile)
            End If

            objExcel.WindowState = Excel.XlWindowState.xlMinimized
            objExcel.Visible = False
            objExcel.DisplayAlerts = False

            objWorkBooks = CType(objExcel.Workbooks, Excel.Workbooks)
            objWorkBook = CType(objWorkBooks.Open(_xslFile), Excel.Workbook)

            'EXCEL出力処理
            With objWorkBook.Sheets(_sheetNo)
                .Range(_col & _line + 0) = _A1
                .Range(_col & _line + 1) = _A2
                .Range(_col & _line + 2) = _A3
                .Range(_col & _line + 3) = _A4
                .Range(_col & _line + 4) = _A5

                '印刷実行
                If _printer <> "" Then
                    .PrintOut(Copies:=1, ActivePrinter:=_printer, Collate:=True)
                Else
                    .PrintOut(Copies:=1, Collate:=True)
                End If
            End With

            objWorkBook.Saved = True                        '保存済みとする

        Catch ex As Exception
            Throw ex
        Finally
            ' EXCEL終了処理
            If Not IsNothing(objWorkBook) Then
                objWorkBook.Close(False)                    'ファイルを閉じる
                Marshal.ReleaseComObject(objWorkBook)       'オブジェクト参照を解放
                objWorkBook = Nothing                       'オブジェクト解放
            End If

            If Not IsNothing(objWorkBooks) Then
                Marshal.ReleaseComObject(objWorkBooks)      'オブジェクト参照を解放
                objWorkBooks = Nothing                      'オブジェクト解放
            End If

            If Not IsNothing(objExcel) Then
                objExcel.Quit()                             'EXCELを閉じる
                Marshal.ReleaseComObject(objExcel)          'オブジェクト参照を解放
                objExcel = Nothing                          'オブジェクト解放
            End If
            System.GC.Collect()                             'オブジェクトを確実に削除
        End Try
    End Sub

End Class

★メインのフォーム(テスト用)(Form1.vb)
''' -----------------------------------------------------------------------------
''' メインのフォーム(テスト用)
''' -----------------------------------------------------------------------------
Public Class Form1
    Inherits System.Windows.Forms.Form

#Region " Windows フォーム デザイナで生成されたコード "

    Public Sub New()
        MyBase.New()

        ' この呼び出しは Windows フォーム デザイナで必要です。
        InitializeComponent()

        ' InitializeComponent() 呼び出しの後に初期化を追加します。

    End Sub

    ' Form は、コンポーネント一覧に後処理を実行するために dispose をオーバーライドします。
    Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
        If disposing Then
            If Not (components Is Nothing) Then
                components.Dispose()
            End If
        End If
        MyBase.Dispose(disposing)
    End Sub

    ' Windows フォーム デザイナで必要です。
    Private components As System.ComponentModel.IContainer

    ' メモ : 以下のプロシージャは、Windows フォーム デザイナで必要です。
    'Windows フォーム デザイナを使って変更してください。  
    ' コード エディタを使って変更しないでください。
    Friend WithEvents Button1 As System.Windows.Forms.Button
     Private Sub InitializeComponent()
        Me.Button1 = New System.Windows.Forms.Button
        Me.SuspendLayout()
        '
        'Button1
        '
        Me.Button1.Location = New System.Drawing.Point(24, 16)
        Me.Button1.Name = "Button1"
        Me.Button1.Size = New System.Drawing.Size(280, 56)
        Me.Button1.TabIndex = 0
        Me.Button1.Text = "印 刷"
        '
        'Form1
        '
        Me.AutoScaleBaseSize = New System.Drawing.Size(5, 12)
        Me.ClientSize = New System.Drawing.Size(328, 94)
        Me.Controls.Add(Me.Button1)
        Me.Name = "Form1"
        Me.Text = "エクセルを使用した帳票印刷のサンプル"
        Me.ResumeLayout(False)

    End Sub

#End Region

    ''' -----------------------------------------------------------------------------
    ''' 印刷ボタンクリック
    ''' -----------------------------------------------------------------------------
    Private Sub Button1_Click( _
            ByVal sender As System.Object, _
            ByVal e As System.EventArgs) Handles Button1.Click
        Dim objExcel As New ExcelPrint
        objExcel._A1 = "A1"
        objExcel._A2 = "A2"
        objExcel._A3 = "A3"
        objExcel._A4 = "A4"
        objExcel._A5 = "A5"
        objExcel.Print()
        objExcel = Nothing
    End Sub
End Class