用EXCEL作為報表的輸出方式還是比較常用的方式,這樣可以充分利用EXCEL 的強大的編輯功能,以及打印功能。而采用模板方式是比較好的方法,首先在 EXCEL中制作模板,然後在生成報表時調用模板。這樣能方便的生成我們需要的 報表。這裡主要描述如何加載模板和添加每頁報表。代碼如下:
void CExceltestDlg::OnButton1()
{
// TODO: Add your control notification handler code here
_Application ExcelApp;
Workbooks wbsMyBooks;
_Workbook wbMyBook;
Worksheets wssMysheets;
_Worksheet wsMysheet;
Range rgMyRge;
//創建Excel 2000服務器(啟動Excel)
if (!ExcelApp.CreateDispatch("Excel.Application",NULL))
{
AfxMessageBox("創建Excel服務失敗!");
exit(1);
}
ExcelApp.SetVisible(false);
//利用模板文件建立新文檔
char path[MAX_PATH];
GetCurrentDirectory(MAX_PATH,path);
CString strPath = path;
strPath += "\\template1";
wbsMyBooks.AttachDispatch(ExcelApp.GetWorkbooks(),true);
wbMyBook.AttachDispatch(wbsMyBooks.Add(_variant_t(strPath)));
//得到Worksheets
wssMysheets.AttachDispatch(wbMyBook.GetWorksheets(),true);
//得到sheet1
wsMysheet.AttachDispatch(wssMysheets.GetItem(_variant_t ("sheet1")),true);
//添加模板個數
for(int i=0;i<4;i++){
wsMysheet.Copy(vtMissing,_variant_t(wsMysheet));
}
CString str1;
wsMysheet.AttachDispatch(wssMysheets.GetItem(_variant_t ("sheet1")),true);
str1 = "第1頁";
wsMysheet.SetName(str1);
for(i=0;i<wssMysheets.GetCount()-1;i++){
//此地方該顯示時缺少兩項
wsMysheet = wsMysheet.GetNext();
str1.Format("第%d頁",i+2);
wsMysheet.SetName(str1);
}
wsMysheet.AttachDispatch(wssMysheets.GetItem(_variant_t("第1 頁")),true);
//得到全部Cells,此時,rgMyRge是cells的集合
rgMyRge.AttachDispatch(wsMysheet.GetCells(),true);
//設置1行1列的單元的值
CString str=_TEXT("21:12");
rgMyRge.SetItem(_variant_t((long)7),_variant_t((long) 3),_variant_t(str));
rgMyRge.SetItem(_variant_t((long)9),_variant_t((long) 3),_variant_t(str));
rgMyRge.SetItem(_variant_t((long)7),_variant_t((long) 4),_variant_t(str));
rgMyRge.SetItem(_variant_t((long)8),_variant_t((long) 4),_variant_t(str));
rgMyRge.SetItem(_variant_t((long)9),_variant_t((long) 4),_variant_t(str));
rgMyRge.SetItem(_variant_t((long)10),_variant_t((long) 4),_variant_t(str));
rgMyRge.SetItem(_variant_t((long)11),_variant_t((long) 4),_variant_t(str));
rgMyRge.SetItem(_variant_t((long)12),_variant_t((long) 4),_variant_t(str));
//將表格保存
strPath = path;
strPath += "\\ylhexcel.xls";
wsMysheet.SaveAs (strPath,vtMissing,vtMissing,vtMissing,vtMissing,
vtMissing,vtMissing,vtMissing,vtMissing);
ExcelApp.SetVisible(true);
wbMyBook.PrintPreview(_variant_t(false));
//釋放對象
rgMyRge.ReleaseDispatch();
wsMysheet.ReleaseDispatch();
wssMysheets.ReleaseDispatch();
wbMyBook.ReleaseDispatch();
wbsMyBooks.ReleaseDispatch();
ExcelApp.ReleaseDispatch();
}
結果得到如下圖:
圖一 添加完表格得到的報表
圖二 模版
希望能給需要的朋友有所幫助,也希望各位朋友能提出更好的使用方法。
本文配套源碼