PowerShell で ClosedXML を使って Excel ファイルを作成する
経緯
以前 PowerShell で Excel をどうのこうのすることに興味を持ってくれると嬉しい としてブログを書いたことがあります。
その時の方法では、 Excel がインストールされている必要がありましたが、ClosedXML というライブラリを使うと Excel がインストールされていなくても Excel のファイルを作れることを知りましたので、少し試してみたいと思います。
環境
- Windows 10
- PowerShell 5.0
- ClosedXML 0.76.0
- Microsoft Open XML Format SDK
作業ディレクトリ
作業ディレクトリをデスクトップに作りました。
ClosedXML の準備
まずはサイトでダウンロードします。 zip 形式でダウンロードできます。
ダウンロードしたライブラリにはセキュリティの観点からブロックが施されていますので、解除をして解凍します。
ダウンロードした zip ファイルを右クリックしてプロパティを開き、ブロックの解除にチェックを入れて OK ボタンを押します。
その後、zip ファイルから ClosedXML.dll を取得して、作業ディレクトリに保存します。
Microsoft Open XML Format SDK の準備
ClosedXML のドキュメントページ からも DLL を直接ダウンロードできますが、今回は
Microsoft のサイトから Microsoft Open XML Format SDK をダウンロードします。
ダウンロードページの例
今回私は 2.0 をインストールしてみましたが、私の環境では、msi を実行すると、 C:\Program Files (x86)\Open XML SDK\V2.0\lib に配置されました。
Office のバージョンと関係があるようです。
MS Office | Open XML Format SDK |
---|---|
Office 2007 | SDK 1.0 |
Office 2010 | SDK 2.0 |
Office 2013 以降 | SDK 2.5 |
ClosedXML 公式で配布されていたのは、2.0 と 2.5 でした。
Hello world
早速 Hello world を書いてみます。
[Reflection.Assembly]::LoadFile("$PSScriptRoot\ClosedXML.dll")
[Reflection.Assembly]::LoadFile("C:\Program Files (x86)\Open XML SDK\V2.0\lib\DocumentFormat.OpenXml.dll")
$workBook = new-object ClosedXML.Excel.XLWorkbook
$workSheet = $workBook.Worksheets.Add("Sheet1")
$worksheet.Cell("A1").Value = "Hello world";
$workBook.SaveAs("$PSScriptRoot\helloworld.xlsx")
結果はこうなりました
考察
とても簡単でしたし、動作がとても軽快で驚きました。以前の方法だと、何らかの理由で COM オブジェクトの破棄ができなかった時は、Excel のプロセスが残ってしまうという事がありましたが、その危険性もなさそうです。
気がついたメリット・デメリットは下記の通りです。
メリット
- 動作が軽快
- Excel が入っていないマシンでも実行できる 重要
- オブジェクトの破棄に気を配る必要がない
デメリット
- xls 形式のファイルは扱えない
- 環境構築が Excel インストールだけに比べると煩雑
ディスカッション
ピンバック & トラックバック一覧
[…] 先に書いたブログ PowerShell で ClosedXML を使って Excel ファイルを作成する にて、「動作が軽快」と書きましたが体感でしかなかったので、単純に 多くのセルにデータを入れたら速度に差 […]