VC中调用EXECL模板生成报表

●新建Excel模板文件tmp.xlt

●准备
新建一对话框工程,打开添加类向导,选择“类型库中的MFC类”

选择Office安装文件夹下面的Excel9.OLB文件,然后选择_Application、Workbooks、_Workbook、Worksheets、_Worksheet、Range,加入新类,分别为_Application、Workbooks、_Workbook、Worksheets、_Worksheet、Range

将excel9.h excel9.cpp拷贝到工程目录并加入工程

●编码实现:
先保护两个头文件

#include "comdef.h" 
#include "Excel9.h" 


添加一按钮,加入下列代码:

      _Application ExcelApp; 
      Workbooks wbsMyBooks; 
      _Workbook wbMyBook; 
      Worksheets wssMysheets; 
      _Worksheet wsMysheet; 
      Range rgMyRge; 

      //创建Excel 2000服务器(启动Excel) 
      if (!ExcelApp.CreateDispatch("Excel.Application",NULL)) 
      { 
            AfxMessageBox("创建Excel服务失败!"); 
            return; 
      } 
      ExcelApp.SetVisible(false); 

      //利用模板文件建立新文档 
      char path[MAX_PATH];
      GetCurrentDirectory(MAX_PATH,path);
      CString strPath = path;
      strPath += "/tmp";
      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("22:12");
      rgMyRge.SetItem(_variant_t((long)2),_variant_t((long)1),_variant_t("0001")); 
      rgMyRge.SetItem(_variant_t((long)2),_variant_t((long)2),_variant_t("哈哈"));
      rgMyRge.SetItem(_variant_t((long)2),_variant_t((long)3),_variant_t("20")); 
      rgMyRge.SetItem(_variant_t((long)2),_variant_t((long)4),_variant_t("男")); 

      rgMyRge.SetItem(_variant_t((long)3),_variant_t((long)1),_variant_t("0002")); 
      rgMyRge.SetItem(_variant_t((long)3),_variant_t((long)2),_variant_t("我我"));
      rgMyRge.SetItem(_variant_t((long)3),_variant_t((long)3),_variant_t("66")); 
      rgMyRge.SetItem(_variant_t((long)3),_variant_t((long)4),_variant_t("女")); 

      //将表格保存
      strPath = path;
      strPath += "/result.xls";
      DeleteFile(strPath);
      wsMysheet.SaveAs(strPath,vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,vtMissing);
      ExcelApp.SetVisible(true);
      
      wbMyBook.AttachDispatch(wbsMyBooks.Add(_variant_t(strPath)));
      wbMyBook.PrintPreview(_variant_t(false)); 
      ExcelApp.Quit();

      //释放对象 
      rgMyRge.ReleaseDispatch(); 
      wsMysheet.ReleaseDispatch(); 
      wssMysheets.ReleaseDispatch(); 
      wbMyBook.ReleaseDispatch(); 
      wbsMyBooks.ReleaseDispatch(); 
      ExcelApp.ReleaseDispatch(); 


}


●运行 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值