LoginSignup
1
7

More than 5 years have passed since last update.

VB.NetでExcelファイルをPDF出力し、Zip圧縮する

Last updated at Posted at 2018-05-22

追記

この記事のソースには問題があるようです。
具体的には開放処理が足りない模様。
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

VB.Net
Imports Microsoft.Office.Interop
Imports System.IO.Compression

3. 各種値をなんとかする

VB.Net
' 日時とっとく
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を開く

VB.Net
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の内容をいじる

VB.Net
  With xlsxBook.Sheets(1)
    .Range("1:1").Insert()
    .Cells(1,1) = nowYMDHMS
    .Cells(1,2) = "プログラムで値を入れたよ。"
    .Columns("A:B").AutoFit()
  End With

6. Excelに内容を保存する

VB.Net
  ' 上書き保存
  xlsxBook.Save()
  ' 別名保存
  xlsxBook.SaveAs(newDir & xlsxFileName)

7. PDFに内容を保存する

VB.Net
  ' 別名保存したExcelと同じフォルダに出力する
  xlsxBook.ExportAsFixedFormat( _
    Type:=Excel.XlFixedFormatType.xlTypePDF, _
    Filename:=newDir & pdfFileName)

参考
Workbook.ExportAsFixedFormat メソッド (Excel)

8. ZIP圧縮する

VB.Net
  ' ここ確認できてない
  ' System.IO.Compression.ZipFile.CreateFromDirectory(newDir, oldDir & zipFileName)

参考
ZipFile.CreateFromDirectory メソッド (String, String)

結果

  • Excel開く、保存するのは簡単にできる
  • PDFへの出力は簡単にできる
  • Zip圧縮も簡単にできる
  • 良い時代になったものだ

以上

1
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
7