使用COM或者OLE的方法调用来控制Excel或者其他Office组件
来源:互联网 发布:明星语音包软件 编辑:程序博客网 时间:2024/05/04 03:42
很多时候需要直接操作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,仔细研究的话,可以实现更强大的功能。
- 使用COM或者OLE的方法调用来控制Excel或者其他Office组件
- MFC中使用OLE/COM操作EXCEL的方法
- MFC中使用OLE/COM操作EXCEL的方法
- Java 调用C 或者其他语言的方法-JNI
- 在使用C#调用COM组件操作Excel的时候阻止其他程序对此文件操作
- 在java中使用Jawin组件访问Windows下的COM组件 java调用ole
- 创建COM组件的实现(或者叫作注册Com组件)
- Delphi控制Excel的方法 OLE
- Delphi控制Excel的方法 OLE
- 当TextView或者EditView的内容发生变化时,其他组件及时给予响应时,我们可以使用TextWatcher来实现。
- 关于不调用word excel 等等的com对象生成doc文件或者xls文件
- 弹出层blockui插件主要使用blockUI和unblockUI两个方法来控制弹出层的显示或者隐藏
- COM组件替换或者升级
- Windows调用其他应用程序或者杀死正在运行或无法手动杀死的进程的方法
- 不安装python运行python文件或者是用其他语言调用python模块的方法
- win7(windows) 下 git bash 调用 notepad++ 或者其他编辑器的方法
- 在其他class或者view中获取MainActivity实例,以便调用其函数的方法:
- C++使用OLE/COM高速读写EXCEL的源码(OLE/COM)
- test
- 计算机族必喝的健康饮料
- Python编码风格指南 (转载)
- MATLAB7.0介绍
- Fortran就是算的快阿
- 使用COM或者OLE的方法调用来控制Excel或者其他Office组件
- Spring Framework 1.1 RC1 released
- log4j使用: 自动设置备份文件
- 自己定义窗口类
- 不可同食的食物。
- lotus R6下使用Servlet的配置方法
- DecimalFormat的疑惑
- 中国高校ftp 汇总
- 将字符串分段,取得每段内容