追記
この記事のソースには問題があるようです。
具体的には開放処理が足りない模様。
Excelファイルを C# と VB.NET で読み込む "正しい" 方法
前提
有り物の古い環境で確認しているので諸々古い場合があります。
というか環境が古く.NET Framework 4.0だったのでZIP圧縮周りを動かせていません。
また軽い検証用なのでエラー処理などは適当です。
やりたかったこと
- 既存のExcelファイルを開き、内容を変更して別名保存
- 同じ内容をPDFにExport
- 別名保存したExcelファイルとPDFファイルをまとめてZip圧縮
環境
Windows7
Visual Studio 2010
.NET Framework 4.0
Office2010
実装
1. 参照の追加
[参照の追加]-[COM]-[Microsoft Excel xx.x Object Library]
→ うちはMicrosoft Excel 14.0 Object Libraryでした。
[参照の追加]-[.NET]-[System.IO.Compression.FileSystem]
→ .NET Framework 4.5以降の資材なので環境に無かったです。
参考
Office プライマリ相互運用機能アセンブリ
System.IO.Compression 名前空間
2. Imports
Imports Microsoft.Office.Interop
Imports System.IO.Compression
3. 各種値をなんとかする
' 日時とっとく
Dim nowYMDHMS As String = Now().ToString().Replace("/","_").Replace(" ","_")
' 第一引数にExcelファイル名をフルパスでもらう予定
Dim oldDir As String = args(0).Substring(0, arg(0).LastIndexOf("\") + 1)
Dim newDir As String = oldDir & nowYMDHMS & "\"
Dim xlsxFileName As String = args(0).Substring(arg(0).LastIndexOf("\") + 1)
Dim pdfFileName As String = xlsxFileName.Substring(xlsxFileName.LastIndexOf(".")) & ".pdf"
Dim zipFileName As String = xlsxFileName.Substring(xlsxFileName.LastIndexOf(".")) & ".zip"
' 新しい出力先を作っておく
System.IO.Directory.CreateDirectory(newDir)
4. Excelを開く
Dim xlsxBook As Excel.Workbook = Nothing
Try
xlsxBook = (New Excel.Application).Workbook.Open(oldDir & xlsxFileName)
' 続きの処理はここに追加していく
Catch ex As Exception
Console.WriteLike(ex)
Finally
If Not xlsxBook Is Nothing Then
xlsxBook.Close()
End If
End Try
5. Excelの内容をいじる
With xlsxBook.Sheets(1)
.Range("1:1").Insert()
.Cells(1,1) = nowYMDHMS
.Cells(1,2) = "プログラムで値を入れたよ。"
.Columns("A:B").AutoFit()
End With
6. Excelに内容を保存する
' 上書き保存
xlsxBook.Save()
' 別名保存
xlsxBook.SaveAs(newDir & xlsxFileName)
7. PDFに内容を保存する
' 別名保存したExcelと同じフォルダに出力する
xlsxBook.ExportAsFixedFormat( _
Type:=Excel.XlFixedFormatType.xlTypePDF, _
Filename:=newDir & pdfFileName)
参考
Workbook.ExportAsFixedFormat メソッド (Excel)
8. ZIP圧縮する
' ここ確認できてない
' System.IO.Compression.ZipFile.CreateFromDirectory(newDir, oldDir & zipFileName)
参考
ZipFile.CreateFromDirectory メソッド (String, String)
結果
- Excel開く、保存するのは簡単にできる
- PDFへの出力は簡単にできる
- Zip圧縮も簡単にできる
- 良い時代になったものだ
以上