使用COM或者OLE的方法调用来控制Excel或者其他Office组件

原创 2004年07月29日 15:05:00

    很多时候需要直接操作Office来满足程序的要求,例如需要把输出的数据写到Word 或者输出到表格Excel里。如果对它们的文件格式了解的话可以直接写文件的方式来操作,不过既然Office提供了COM组件,当然用这个更方便了。

   下面是是一个往Excel写表格的函数,首先要做的是在VC-ClassWizard-Automation-AddClass-From a type library 找到/office/EXCEL9.OLB这个库,然后分别添加下面几个Class。

//声明变量

 _Application ExcelApp;
 Workbooks wbsMyBooks;
 _Workbook wbMyBook;
 Worksheets wssMysheets;
 _Worksheet wsMysheet;
 Range Cells; 
 
 //选择保存文件
 char* szFilter="Excel Files(*.xls)|*.xls";
 CFileDialog dlg(FALSE,"xls","Report",
  OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,szFilter,NULL);
 if(dlg.DoModal()==IDOK)
 {

//模板Excel路径
  strPath=GetPath();

//保存路径
  strSavePath=dlg.GetPathName();
  //创建Excel 2000服务器(启动Excel)
  if (!ExcelApp.CreateDispatch("Excel.Application",NULL))
  {
   AfxMessageBox("创建Excel服务失败!");
   return;
  }

//使Excel不可见
  ExcelApp.SetVisible(false);
  
  LPDISPATCH lpDisp;    // Often reused variable.
  COleVariant
   covTrue((short)TRUE),
   covFalse((short)FALSE),
   covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
  
  lpDisp = ExcelApp.GetWorkbooks();     // Get an IDispatch pointer.
  ASSERT(lpDisp);
  wbsMyBooks.AttachDispatch(lpDisp);    // Attach the IDispatch pointer
  // to the books object.
  strPath+="//Info.xls";
  lpDisp = wbsMyBooks.Open(strPath,     // Test.xls is a workbook.
   covOptional, covOptional, covOptional, covOptional, covOptional,
   covOptional, covOptional, covOptional, covOptional, covOptional,
   covOptional, covOptional);   // Return Workbook's IDispatch
  // pointer.
  wbMyBook.AttachDispatch( lpDisp );
  lpDisp = wbMyBook.GetSheets();
  ASSERT(lpDisp);
  wssMysheets.AttachDispatch(lpDisp);
  // Get sheet #1 and attach the IDispatch pointer to your sheet
  // object.
  lpDisp = wssMysheets.GetItem( COleVariant((short)(1)) );
  ASSERT(lpDisp);
  wsMysheet.AttachDispatch(lpDisp);
  
  //写表格
  nCount=pReport->GetSize();
  Cells=wsMysheet.GetCells();//取单元格集合
  for(i=0;i<nCount;i++)
  {
   structReport=pReport->GetAt(i);
   //注意单元格集合与单元格都是一个范围对象
   Cells.SetItem(CComVariant(i+2),CComVariant(1),CComVariant(structReport.strRecver));
   Cells.SetItem(CComVariant(i+2),CComVariant(2),CComVariant(structReport.strTime));
   Cells.SetItem(CComVariant(i+2),CComVariant(3),CComVariant(structReport.strFile));

  }
  wsMysheet.SaveAs(strSavePath,vtMissing,vtMissing,vtMissing,vtMissing,
   vtMissing,vtMissing,vtMissing,vtMissing);
  wbsMyBooks.Close();
  ExcelApp.Quit();
  Cells.ReleaseDispatch();
  wsMysheet.ReleaseDispatch();
  wssMysheets.ReleaseDispatch();
  wbMyBook.ReleaseDispatch();
  wbsMyBooks.ReleaseDispatch();
  ExcelApp.ReleaseDispatch();
  AfxMessageBox("生成报表完毕!");
 }

整个过程不是很复杂,如果需要其他功能,可以直接查看刚才引入的几个Class的函数,大概就知道能做些什么了,库里还有很多Class,仔细研究的话,可以实现更强大的功能。

VS2010 C++ 操作Excel表格的编程实现(OLE/COM)

转载请注明原文网址: http://www.cnblogs.com/xianyunhe/archive/2011/09/25/2190485.html 通过VC实现对Excel表格的操作的方法有多...
  • baidu_37503452
  • baidu_37503452
  • 2017年06月02日 11:18
  • 522

MFC中使用OLE/COM操作EXCEL的方法

使用OLE的方法操作EXCEL,首先计算机必须安装excel,这样才会有接口暴露出来。本次使用大神封装好的类。 excel作为OLE/COM库插件,定义好了各类交互接口,而且这些接口是跨语言的,可以导...
  • lht501692913
  • lht501692913
  • 2015年12月17日 19:25
  • 2311

OLE、ActiveX 、COM和普通DLL的简单理解

COM: COM组件是以WIN32动态链接库(DLL)或可执行文件(EXE)形式发布的可执行代码组成。 COM组件是遵循COM规范编写的 COM组件是一些小的二进制可执行文件 COM组件可以给应用程序...
  • Liekkas
  • Liekkas
  • 2015年04月27日 11:22
  • 1115

OLe复合文档介绍

/////////////////////////////////////////////////结构化存储和OLE对象////////////////////////////////////////...
  • dotneterbj
  • dotneterbj
  • 2014年03月10日 10:42
  • 1328

以OLE方式读写EXCEL的C++类【转载】

◆C++中的【L"https://msdn.microsoft.com/library"】。 这个是C++标准规定的写法。详见以下链接: http://bbs.csdn.net/topics/3906...
  • u013600225
  • u013600225
  • 2016年03月20日 08:21
  • 1299

VC用OLE方式读写Excel

(转自:http://blog.csdn.net/qinghezhen/article/details/9906023)   前几天要做一个项目,需要读取Excel中的数据。从网上查资料发现,...
  • Xp275500976
  • Xp275500976
  • 2014年03月25日 10:55
  • 4796

OLE、ActiveX、COM、ATL联系与区别

熟悉面向对象编程和网络编程的人一定对ActiveX、OLE和COM/DCOM这些概念不会陌生,但是它们之间究竟是什么样的关系,对许多们还是比较模糊的。在具体介绍它们的关系之间,我们还是先明确组件(Co...
  • lp310018931
  • lp310018931
  • 2015年09月19日 18:09
  • 1023

使用VC++6.0 MFC OLE操作Excel 进行简单的读写

使用VC++6.0 MFC OLE操作Excel 进行简单的读写 使用VC60 MFC OLE操作Excel 进行简单的读写 - 简单的准备工作 - 所需求的类库 - 写入操作 -读取操作 -总结- ...
  • llwodao
  • llwodao
  • 2016年06月02日 17:00
  • 1001

从OLE到COM,再到ActiveX,再到.NET

微软从OLE到COM,再到ActiveX,再到.NET的发展历史的简介
  • just0kk
  • just0kk
  • 2016年03月02日 21:31
  • 758

VC++之Office自动化开发

去年底老板临时交给一个任务,为一个试验数据管理系统编写一个电子报告生成程序。因为老板也不怎么重视这个项目(钱少啊,呵呵),所以这个任务只好落在我这种小硕身上了。我也是两眼瞎,万事从头干。三个月的苦斗,...
  • qing666888
  • qing666888
  • 2016年03月07日 14:09
  • 1047
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:使用COM或者OLE的方法调用来控制Excel或者其他Office组件
举报原因:
原因补充:

(最多只允许输入30个字)