・・・っていうサンプルがあった。
Reading and Writing to Excel files using WPF 4.5
OLBConnectionというクラスを経由して、Excelの内部オブジェクトを触れるような雰囲気だ。
となると、僕の要件としてはこれが出来ればいい。
- 元のExcelテンプレ作る - Readで読み込む - Writeで該当のパラメーターを入れこむ --繰り返し処理が可能かどうか気になる - ページ追加が必要なら追加 - 印刷ダイアログを経由せずダイレクト印刷
4ページに渡る発注書(100行近い発注書を投げることがある)を、どれぐらいの速度で印刷してくれるのかが大変気になるが、PrintDocumentでチマチマチマチマ書くことを考えると、検証して見る価値は十分にあるな。ドキュメントのパースとかしないだろうから、きっと速いんだ(*^◯^*)
あとはテンプレートに差し込んだあとの後処理をどうしたらいいのか。新しくファイル保存して印刷してから印刷完了後にDeleteするのが楽そうだけど。
PrintDocumentから卒業する道は中々に険しい。
あとはこのOLBなんとかってExcelが入ってないマシンでも差し込めて印刷可能かどうかも気になる。.NET経由で呼んでるから、.NET Frameworkのクライアントのバージョンがよほど食い違いがないなら動くだろう。
2014.08.06 追記
NuGet経由でもっと簡単にExcel生成可能なライブラリがあった。2014年の今でも開発が続行されている。すごく嬉しい。そして、Excel操作、超簡単でした。
ClosedXML - The easy way to OpenXML - Home
ただ、印刷がきつかった。大きく分けて2通りの方法があったが、ExcelがインストールされていないPCでは動かないので、かなりキツイ。Excel内部の印刷を叩いている可能性が大。
前者はExcel.exeを起動して印刷する方法、後者はCOM参照して読みだす方法。COMってことはクライアントに同じCOMが入ってないとダメだし、バージョンの相違を拾うのはイヤ。
最終的に帳票印刷をどうすべきか悩んでいるのだけれども、お金を払わずにPrintDocumentで描画せずにテンプレート差し込みで生きていくとなると、HTMLで書いて内部ブラウザからこっそりPrintさせたらええんちゃうか、という気がしてきた。ただ、HTMLにするとページ毎に繰り返す処理がめんどくさい。
結局、納品書づくりに銀の弾丸はなく、カネを払うか手間を掛けるかのどっちかしかないみたいだ。