LoginSignup
11
17

More than 5 years have passed since last update.

PowerShell で ClosedXML を使って Excel ファイルを作成する

Last updated at Posted at 2016-08-04

ブログからの転載

経緯

以前 PowerShell で Excel をどうのこうのすることに興味を持ってくれると嬉しい としてブログを書いたことがあります。

その時の方法では、 Excel がインストールされている必要がありましたが、ClosedXML というライブラリを使うと Excel がインストールされていなくても Excel のファイルを作れることを知りましたので、少し試してみたいと思います。

環境

  • Windows 10
  • PowerShell 5.0
  • ClosedXML 0.76.0
  • Microsoft Open XML Format SDK

作業ディレクトリ

作業ディレクトリをデスクトップに作りました。

ClosedXML の準備

まずはサイトでダウンロードします。 zip 形式でダウンロードできます。

01.png

ダウンロードしたライブラリにはセキュリティの観点からブロックが施されていますので、解除をして解凍します。

ダウンロードした zip ファイルを右クリックしてプロパティを開き、ブロックの解除にチェックを入れて OK ボタンを押します。

02.png

その後、zip ファイルから ClosedXML.dll を取得して、作業ディレクトリに保存します。

Microsoft Open XML Format SDK の準備

ClosedXML のドキュメントページ からも DLL を直接ダウンロードできますが、今回は
Microsoft のサイトから Microsoft Open XML Format SDK をダウンロードします。

ダウンロードページの例
03.png

今回私は 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")

結果はこうなりました

04.png

考察

とても簡単でしたし、動作がとても軽快で驚きました。以前の方法だと、何らかの理由で COM オブジェクトの破棄ができなかった時は、Excel のプロセスが残ってしまうという事がありましたが、その危険性もなさそうです。

気がついた点は次の通りです。

メリット

  • 動作が軽快
  • Excel が入っていないマシンでも実行できる ※重要
  • オブジェクトの破棄に気を配る必要がない

デメリット

  • xls 形式のファイルは扱えない (Office 2007 以上限定)
  • 環境構築が Excel インストールだけに比べると煩雑
11
17
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
11
17