用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. } 结果得到如下图:
图一 添加完表格得到的报表
图二 模版 希望能给需要的朋友有所帮助,也希望各位朋友能提出更好的使用方法。 |
VC中调用EXECL模板生成报表
最新推荐文章于 2019-01-21 14:38:00 发布