VC中调用EXECL模板生成报表

用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();
}

时间: 2024-08-31 03:44:34

VC中调用EXECL模板生成报表的相关文章

VC++中调用word进行word表格的填写

在实际应用中,编程者往往喜欢程序能自动生成word说明文档,说明程序运 行的状况或运行的结果:或者程序能提取数据库的内容生成word表格,使用户能 方便的查看和修改,打印.但是VC++中调用word的确不容易,特别是对word中各 种函数的使用,本文以作者的工作经验详细介绍一下如何调用word和进行word表 格的填写,有同样需求的编友也可查看一下MSDN中的Automation Microsoft Office 97 and Microsoft office 2000.下面介绍以Microso

class-android中调用BitmapFactory.decodeResource()生成位图对象的问题

问题描述 android中调用BitmapFactory.decodeResource()生成位图对象的问题 调用BitmapFactory.decodeResource()生成位图对象 //BitmapFactory.decodeResource()这里的BitmapFactory是一个类还是一个对象呢,如何判断呢? 解决方案 public class BitmapFactory decodeResource是它内部的静态方法,所以BitmapFactory不需要实例化就可以访问static方

matlab-利用MTACOM在VC中调用MATLAB出错了

问题描述 利用MTACOM在VC中调用MATLAB出错了 错误如图,按照教程做的,哪里错了呢?请高手指教! 解决方案 http://wenku.baidu.com/link?url=fqKhUoFhm9j9Q8e2FEt26NU74u7Gfho1XNs0JYmGpOVMCuhzIg0cCwmB5r7nRadXRm-_wpPJP0wUIdaW3xC0dZyviNUyLEvCe73HnFABmQ7

详解WordPress中调用评论模板和循环输出评论的PHP函数_php技巧

comments_templatecomments_template 函数是一个调用评论模板的函数,使用起来很简单,与get_header()等函数一样,是一个include文件类函数,今天来讲一下他的使用. 描述 上面已经讲过了,就是调用评论模板的一个函数. 使用 <?php comments_template( $file, $separate_comments ); ?> 其中 $file 需要调用的文件名 默认值: /comments.php $separate_comments 是否

在VC中调用WebService

一.什么是WebService ? WebService其实就是一个基于网络的应用程序,它向外部程序提供一定的调用接口.外部(远程)的程序,可以经由Web对其进行调用. 二.WebService 的特性: 1.由于 WebService 经由web服务器发布,所以比DCOM而言,可以顺利穿过防火墙.这也是 WebService 的优点之一,可以说, WebService ,为分布 式应用的开发,提供了一个很好的平台. 2.对 WebService 的调用,是通过SOAP协议进行的.简单对象访问协

vc中调用Com组件的方法详解

需求:1.创建myCom.dll,该COM只有一个组件,两个接口:   IGetRes--方法Hello(),   IGetResEx--方法HelloEx() 2.在工程中导入组件或类型库  #import "组件所在目录myCom.dll" no_namespace 或    #import "类型库所在目录myCom.tlb"   using namespace MYCOM; 方法一:    CoInitialize(NULL);   CLSID clsid;

在VC中调用默认的电子邮件程序发送邮件

程序|发送邮件 很多时候大家需要在程序中发送邮件,自己编又太麻烦,怎么办,呵呵,有现成的! 1.想省事儿的,用ShellExecute函数: ShellExecute(NULL,NULL,"mailto:email@263.net",NULL,NULL,SW_SHOW); 2.如果想自己多处理一些东西的话,比如加上默认的帐号.密码.附件等,就可以调用系统的Mapi函数.具体的用法大家可以去查MSDN都是以MAPI开头的,如MAPILogon.MAPISendMail等.下面这段代码演示

java报表-基于excel模板的数据填充,即允许客户自定义编辑模板并生成报表

问题描述 基于excel模板的数据填充,即允许客户自定义编辑模板并生成报表 现有这样的开发需求,针对java语言的.目前有没有这样的技术,能允许客户对web页面上展示的多行多列数据进行随意筛选,并指定这些选中的数据在excel模板上的某列显示数据,是不是可行的?我在网上搜查了一下,有一个工具比较符合要求,但是资料太少,无法开发,这工具是ExcelUtils,它是基于模板生产报表,但是效果还是不理想,不满足需求,请问还有其他工具或技术可以实现吗?谢谢! 解决方案 Java体系下读写Excel的技术

在VC中怎么样调用LUA中的函数划变量,哪位朋友知道能说一下么,谢谢

问题描述 我想在VC++中调用LUA的函数或变量,可每一次一用到OPEN()就出错,我真的不知道错在哪了,我想从头来,哪位朋友知道怎么做,能给我发来代码么,谢谢,我真的不行了,帮帮忙吧.