VC中调用EXECL模板生成报表

来源:互联网 发布:怎样在matlab2014编程 编辑:程序博客网 时间:2024/05/16 10:47

用EXCEL作为报表的输出方式还是比较常用的方式,这样可以充分利用EXCEL的强大的编辑功能,以及打印功能。而采用模板方式是比较好的方法,首先在EXCEL中制作模板,然后在生成报表时调用模板。这样能方便的生成我们需要的报表。这里主要描述如何加载模板和添加每页报表。代码如下:

01.void CExceltestDlg::OnButton1()
02.{
03.// TODO: Add your control notification handler code here
04._Application ExcelApp;
05.Workbooks wbsMyBooks;
06._Workbook wbMyBook;
07.Worksheets wssMysheets;
08._Worksheet wsMysheet;
09.Range rgMyRge; 
10.//创建Excel 2000服务器(启动Excel)
11.if (!ExcelApp.CreateDispatch("Excel.Application",NULL))
12.{
13.AfxMessageBox("创建Excel服务失败!");
14.exit(1);
15.}
16.ExcelApp.SetVisible(false);
17.//利用模板文件建立新文档
18.char path[MAX_PATH];
19.GetCurrentDirectory(MAX_PATH,path);
20.CString strPath = path;
21.strPath += "\\template1";
22.wbsMyBooks.AttachDispatch(ExcelApp.GetWorkbooks(),true);
23.wbMyBook.AttachDispatch(wbsMyBooks.Add(_variant_t(strPath)));
24.//得到Worksheets
25.wssMysheets.AttachDispatch(wbMyBook.GetWorksheets(),true);
26.//得到sheet1
27.wsMysheet.AttachDispatch(wssMysheets.GetItem(_variant_t("sheet1")),true);
28.//添加模板个数
29.for(int i=0;i<4;i++){
30.wsMysheet.Copy(vtMissing,_variant_t(wsMysheet));
31.}
32.CString str1;
33.wsMysheet.AttachDispatch(wssMysheets.GetItem(_variant_t("sheet1")),true);
34.str1 = "第1页";
35.wsMysheet.SetName(str1);
36.for(i=0;i<wssMysheets.GetCount()-1;i++){
37.//此地方该显示时缺少两项
38.wsMysheet = wsMysheet.GetNext();
39.str1.Format("第%d页",i+2);
40.wsMysheet.SetName(str1);
41.}
42.wsMysheet.AttachDispatch(wssMysheets.GetItem(_variant_t("第1页")),true);
43.//得到全部Cells,此时,rgMyRge是cells的集合
44.rgMyRge.AttachDispatch(wsMysheet.GetCells(),true);
45.//设置1行1列的单元的值
46.CString str=_TEXT("21:12");
47.rgMyRge.SetItem(_variant_t((long)7),_variant_t((long)3),_variant_t(str));
48.rgMyRge.SetItem(_variant_t((long)9),_variant_t((long)3),_variant_t(str));
49.rgMyRge.SetItem(_variant_t((long)7),_variant_t((long)4),_variant_t(str));
50.rgMyRge.SetItem(_variant_t((long)8),_variant_t((long)4),_variant_t(str));
51.rgMyRge.SetItem(_variant_t((long)9),_variant_t((long)4),_variant_t(str));
52.rgMyRge.SetItem(_variant_t((long)10),_variant_t((long)4),_variant_t(str));
53.rgMyRge.SetItem(_variant_t((long)11),_variant_t((long)4),_variant_t(str));
54.rgMyRge.SetItem(_variant_t((long)12),_variant_t((long)4),_variant_t(str));
55.//将表格保存
56.strPath = path;
57.strPath += "\\ylhexcel.xls";
58.wsMysheet.SaveAs(strPath,vtMissing,vtMissing,vtMissing,vtMissing,
59.vtMissing,vtMissing,vtMissing,vtMissing);
60.ExcelApp.SetVisible(true);
61.wbMyBook.PrintPreview(_variant_t(false));
62.//释放对象
63.rgMyRge.ReleaseDispatch();
64.wsMysheet.ReleaseDispatch();
65.wssMysheets.ReleaseDispatch();
66.wbMyBook.ReleaseDispatch();
67.wbsMyBooks.ReleaseDispatch();
68.ExcelApp.ReleaseDispatch();
69.}

结果得到如下图:

图一 添加完表格得到的报表

图二 模版

希望能给需要的朋友有所帮助,也希望各位朋友能提出更好的使用方法。


原创粉丝点击