必要な情報を設定したら最後はファイルを保存します。ファイル名以外の値はここでは省略しています。ユーザコントロール禁止の解除もおこないます。使用しているのは最初の引数(保存ファイル名)だけです。その他の引数はNULLまたは0を指定しています。VBAを使用する時省略可能な引数であっても、オートメーションでのメソッド呼び出しでは省略できません。
//保存
wbook.SaveAs(COleVariant("c:\\sample.xls"),
covOptional,covOptional,covOptional,
covOptional,covOptional,0,covOptional,
covOptional,covOptional,covOptional
);
//操作禁止解除
excel.put_UserControl(TRUE);
最後にアタッチしたリソースの解放を忘れずに行ってください。また、ExcelアプリケーションにAttachDispatch()/CreateDispatch()したかにより最後の終了処理を変えています。ここではCreateDispatch()した場合のみアプリケーションを終了しています。
//クリーンアップ
if (bCreate) excel.Quit();
wsheet.ReleaseDispatch();
wsheets.ReleaseDispatch();
wbook.ReleaseDispatch();
wbooks.ReleaseDispatch();
excel.ReleaseDispatch();新たにタイプライブラリからPageSetupクラスを生成し、作成したシートオブジェクトをこの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
);