読者です 読者をやめる 読者になる 読者になる

Life is Really Short, Have Your Life!!

ござ先輩の主に技術的なメモ

WPFでExcelをテンプレートにしてデータを流しこんで印刷する

・・・っていうサンプルがあった。

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にするとページ毎に繰り返す処理がめんどくさい。

結局、納品書づくりに銀の弾丸はなく、カネを払うか手間を掛けるかのどっちかしかないみたいだ。