かわろぐ

技術、ボルダリング、セキュリティ、その他もろもろ

MENU

ClosedXML を使って複数のExcelファイルをまとめる

日付の Excel ファイルが大量に

日々検出されるとあるログが日付の Excel ファイルになって蓄積されており、それを月次で推移をグラフにしたいのですが、手動で一つのExcelファイルにまとめるのはしんどいのでC#でプログラムを書きました。その時のハマったところなどをまとめておきます。

大本のプログラムを直せばいいじゃんというツッコミは受け付けません!自分たちのいじれる範囲ではないので。

一回前にトライしましたが、その時はCOMをC#からゴリゴリいじって、意味不明なエラー文言に悩まされて挫折しました… 今回は、その反省を活かして .net ネイティブなライブラリを使ってやりました。ファイルも .xlsx と OpenXML のものですし。

ClosedXML ってなによ?

ClosedXML とは、OpenXML をラップして使いやすくしたライブラリです。 導入方法は、VisualStudio を使っていればパッケージマネージャコンソールから Install-Package ClosedXML ではいります。 以下のようにGUIを使ってもOKですね。

f:id:kawa_xxx:20160718141022p:plain

指定ディレクトリ以下の Excel ファイルを処理する

あとは指定したディレクトリ以下に存在するファイルをすべて取得して、順次処必要なシートの必要な部分のみを取得し、最後にまとめて一つのファイルに出力して完了!やることは簡単です。

一部簡略化してありますが、コードは以下のとおりです。特に難しいことはしていないですね。

ClosedXML のサンプル

XLReangeRow はそのまま保存出来ない

今回ハマったところは同じライブラリなんだからインターフェイスのまま別のファイルへ書き出せるだろうと思ったら Property Get メソッドが見つかりませんでした。 という例外が発生して、ニッチもサッチも行かなくなりました。 仕方ないので、 Model を作ってそれに詰めなおしてから保存するという回避策を取りました。行けてないなぁー。こうすれば出来るとかあるんだろうか?

時間がなくなってしまったので今日はここまでっ。また今度。

参考文献