Excelで印刷

Excelを使って印刷する方法を聞かれたので、そのサンプルを作ってました。


C#からCOMオブジェクトを操作する場合、ちゃんと終了処理を書こうとするとtry-finallyとMarshal.ReleaseComObject()の嵐になるから面倒なんですよね(´ω`)


とりあえずやりかたとしては、プロジェクトの参照の追加から[COM]の「Microsoft Excel 11.0 Object Libraly」を追加。
#11.0なのはOffice 2003だから


ソースコードとしては、Excel.ApplicationをnewしてWorkbooksプロパティを取得、Workbooks.Open()でテンプレートになるExcelファイルを開いて〜、っとtry-finallyがネストしていくわけですが…。


でもこの処理は定型なものだし、どうせCellの値の書き換えくらいしかやらないわけで。
いっそCell周りの処理だけコールバックで処理するようにして、Excelオブジェクト周りの処理は共通ライブラリとして利用者からは隠蔽しちゃうのもありかな〜なんて思いました(・∀・)


で、印刷用のシートが完成したらWorksheet.PrintOut()で印刷。
以降、finallyで使用したExcelオブジェクトをMarshal.ReleaseComObject()していくことになります。


後、印刷するプリンタを指定する場合、Worksheet.PrintOut()の第5引数にプリンタ名を指定。
プリンタ名は、System.Drawing.Printing.PrinterSettings.InstalledPrintersの中から選択。


っと、今日はそんなサンプルを作っていた日でした(`・ω・´)