8月ごろからでしょうか、ちょっと訳あって月度の CSV ファイルを読み取って、ベースになる Excel ファイルをもとに 200程度のファイルを複製して CSV の中身を転記する処理を書くことになったわけです。
今までは別の手法でデータを拾ってきて Excel ファイルに張り付けていたらしいのだけれど、その手法が NG になるので CSV から取得することになりました。

まぁ今までの手法で取得した内容と CSV の内容が微妙に違うってのもあるし、出力する Excel ファイルの書式が担当者の趣味と性格が入り込みすぎて汎用性ゼロって問題もあるのですが、それはおいおい汎用化への説得をしていくとして。

で、プラットフォームをどうしようか、という話になるわけです。
今までは Excel 2003 を使って *.xls を使ってた。 じゃぁこれからはって言うと、まず 3人いる担当者の Office のエディションとバージョンがバラバラなんですね。
1人目は Office 2003 Professional なので Excel 2003 と Access 2003 がある。
2人目は Office 2010 Professional なので Excel 2010 と Access 2010 がある。
3人目は Office 2010 Standard なので Excel 2010 だけ。
Office 2003 はそのうち 2010 に切り替わるとしても、2010 Standard ってのがちとネックかな、と。
CSV の情報を一度加工しなきゃならないし、それを蓄えておいた上で順次読み出ししながら転記しなきゃならんので Access を使おうかってなるわけです。
今回対象としている処理、今後は全データを一気に処理しちゃうようになるので、この際 Access 持ってない人には休んでいただいて、Access が入ってる 2人のうちどちらかの人に処理してもらえば問題ない。

でさっそく Access でゴリゴリと書き出して何とか最低限の処理ができるようになった。ホントは選択したデータだけ出力する機能も付けたかったけど、まずは全データを出力するほうが先。
でテストですよ。
これが終わらねーんだわ。
だんだんと処理スピードが落ちてきて、Excel ファイル 1つ書き出すのに 1秒も掛かってなかったのが 100件目ぐらいになると 10秒ぐらい掛かってるの。
その後もみるみるうちに処理スピードが落ちて行って、まるでアキレスと亀の話ですわ。

あ、まだ前置き。
もう一つの作戦として、Access じゃなくて C# の Windows フォーム アプリで作っちゃえば Access いらないじゃん、と。
こっちは完全に自己啓発ってことで自宅で作業ですわ。
Windows フォームと SQL Server Compact 4.0 あたりでどうだろうか、と。
そんでもってどうせだから Entity Framework のコードファーストで POCO なんかを使ってデータ モデルを作成してみようかなぁなんて趣味も入れちゃうわけですよ。
あらかた読み込み処理が終わったところで気づかされましたよ。

SQL Server Compact データファイルを使った DB アプリって、アプリとデータファイルさえあれば良いって事じゃないんですね。アプリを実行する PC に SQL Server Compact の関連ファイルをインストールしないとダメなんですね。
なんじゃそりゃ。SQL Server エンジンが実行されてない環境でも良いですよっていうメリットはあっても、結局余計なものをインストールしなきゃ使えないってことじゃないですか。
XML ファイルやテキストファイルをデータストアにできるような手軽さまではダメなのね。

つーことで DB は SQLite に決定。これなら DLL だけで済みそう。

そしてようやく本題の Excel 処理。
うちの開発メンバーも、どうしても Excel を扱いたいって場合は泣く泣く VB.NET を使ってたのですが、イロイロと調べていたら、Microsoft の Open XML SDK を使えば COM を使わずに Office 2007 以降のファイル フォーマット (*.xlsx とか) を読み書きできるようになるって言うじゃありませんか。
さっそく調べたのですが、出てくる話題は 「使いづらい」 「やりたい事の数倍の労力が必要」 という悪口ばかり。
ところが Open XML SDK というキーワードと一緒に ClosedXML てキーワードがやたらと出てくる。
詳細はググってもらうとして、さっそく使ってみましたよ。
導入は NuGet を使って楽ちん。
まるで COM を使って Excel を扱っているかのような滑らかさ。
ここ数年の開発で一番感動したかもしれない。
既存ファイルを開く。新規ファイルを作成する。名前を付けて保存する。上書き保存する。シートをコピー する。シートの名前を変える。セルに値を書き込む。セルの値を読み取る。
最低限これだけできれば今回の開発には十分です。

ということで開発も絶好調。
POCO のモデル クラスとデータ コンテキスト クラス、業務処理を行うクラス、CSV を読み込んでモデル データを生成するクラス、Excel を読み込んでモデル データを生成するクラス、Excel に書き出すクラス、ファイル関連のヘルパークラス、時間計算のヘルパー クラスなどを粛々と進めている最中でございます。

次回、「SQLite の Connection String に "DataDirectory" のキーワードが使えないじゃないか」 の巻き。