VC++(MFC)で帳票印刷の手を抜く方法

in

前に書いたVC++(MFC)でExcelを操作する方法というエントリを読んでくれる方が結構いて、あぁ、Web全盛のこの時代でも僕と同じようにまだデスクトップアプリを作成せねばいけない方は多いんだなと実感します。そこで、僕が日頃もっとも面倒だと思っているVC++(MFC)からの帳票印刷について書いておきます。

仕事用のアプリを書いていて一番面倒なのが、なんといっても帳票です。僕も、しばしばOnPrint()をオーバーライドしてゴリゴリゴリゴリゴリゴリゴリと書かざるを得ないことが多いのですが、Excelを使って帳票を印刷するテがあります。もし、アプリケーションのドキュメントをExcelで保存するという機能をすでに実現しているのであれば簡単です。MFC(VC++)でExcelを操作する方法は以前のエントリを参照してください。

新しくタイプライブラリからPageSetupクラスを生成しプログラムに追加し、このCPagesetupクラスで印刷関連をプロパティをセットしシートオブジェクトから印刷メソッドを呼び出すだけです。

まず、アプリケーションのドキュメントをExcelドキュメントとして作成します。そして作成したシートオブジェクトのPageSetupオブジェクトにアタッチし必要なプロパティをセットします。

CPageSetup ps;
ps.AttachDispatch(wsheet.get_PageSetup());
//印刷向き
ps.put_Orientation(2);
//用紙サイズ(A4)
ps.put_PaperSize(9);
//Zoomなし横幅はページ内に収める
ps.put_Zoom(COleVariant((short)FALSE,VT_BOOL));
ps.put_FitToPagesWide(COleVariant((short)1));
ps.put_FitToPagesTall(COleVariant((short)FALSE,VT_BOOL));
//ヘッダ・タイトルのページ数の設定
ps.put_LeftHeader((LPCSTR)GetTitle());
ps.put_RightHeader("&P");
//余白は適当に(
ps.put_TopMargin(48);
ps.put_BottomMargin(32);
ps.put_LeftMargin(24);
ps.put_RightMargin(24);
//印刷
wsheet.PrintOut(
  covOptional,covOptional,covOptional,
  COleVariant((short)FALSE,VT_BOOL),
  covOptional,
  COleVariant((short)FALSE,VT_BOOL),
  COleVariant((short)FALSE,VT_BOOL),
  covOptional
);
//クローズ
wbook.Close(
 COleVariant((short)FALSE,VT_BOOL),
 covOptional,covOptional
);

既にExcelへの出力が実装済みならゴリゴリゴリゴリゴリゴリゴリゴリゴリゴリゴリゴリゴリゴリゴリゴリゴリゴリゴリゴリゴリゴリゴリゴリ...書くより簡単だと思います。

この記事のトラックバックURL:

http://hippos-lab.com/blog/trackback/128

返信