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