Hatena::ブログ(Diary)

おぼえがきラボ

2012-01-17

VB.netからExcelファイルとか出力してみる。

なんてことないが、しらべてみると断片的な情報が多いのでまとめてみた。

・今回やってみたいこと

クライアントPCインストールされているExcelをつかって伝票みたいなもの自動出力したい
クライアントPCインストールされているExcelは2000から2010までとざっくばらん
・あらかじめ用意したテンプレートに出力して、バージョンに関係なく読めるようにExcel互換ファイル(xls)で出力する。


Excelバージョンが統一されていれば、参照設定とかでいっぱい情報はあるのだけれどもこの不景気でそんな都合の良いはなしはないので、却下

なので・・・今回、事前バインディングじゃダメ・・
実行時バインディングしましょう。


Dim objWorkBook As Object
Dim objExcel As Object
Dim fname As String

Try
'CreateObjectでExcelObjectを実行時バインディングする
objExcel = CreateObject("Excel.Application")

objExcel.visible = True
objWorkBook = objExcel.Workbooks.open("テンプレートファイルの保存先パス")

With objExcel.sheets(1)
'hoge = にセルの番号、"ほげほげ" = に入れたいもの
.Cells(hoge, hoge) = "ほげほげ" 
End With

Select Case objExcel.Version
Case "12.0", "14.0"
'ファイルに保存 Excel2007,Excel2010の場合互換方式にて保存
objWorkBook.SaveAs(fname, 56)
Case Else
objWorkBook.SaveAs(fname)
End Select
  '保存時の問合せのダイアログを非表示に設定
objExcel.DisplayAlerts = True

Catch ex As Exception
MsgBox("エクセルインストールされていない、もしくは、伝票生成中にエラーが発生しました。")
Finally

If Not IsNothing(objWorkBook) Then
objWorkBook.Close(False) 'ファイルを閉じる
Marshal.ReleaseComObject(objWorkBook) 'オブジェクト参照を解放
objWorkBook = Nothing 'オブジェクト解放
End If

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

If Not IsNothing(objExcel) Then
objExcel.Quit() 'EXCELを閉じる
Marshal.ReleaseComObject(objExcel) 'オブジェクト参照を解放
objExcel = Nothing 'オブジェクト解放
End If

System.GC.Collect() 'オブジェクトを確実に削除

End Try

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/yohsui/20120117/1326815351