使用C++读写Excel
1.导入Excel类型库
使用Visual C++的扩展指令#import导入Excel类型库:
1
2
3
4
5
6
7
8
9
10
11
12
|
#import "C:\\Program Files\\Common Files\\microsoft shared\\OFFICE14\\MSO.DLL" \ rename ( "RGB" , "MsoRGB" ) \ rename ( "SearchPath" , "MsoSearchPath" ) #import "C:\\Program Files\\Common Files\\Microsoft Shared\\VBA\\VBA6\\VBE6EXT.OLB" #import "C:\\Program Files\\Microsoft Office\\Office14\\EXCEL.EXE" \ rename ( "DialogBox" , "ExcelDialogBox" ) \ rename ( "RGB" , "ExcelRGB" ) \ rename ( "CopyFile" , "ExcelCopyFile" ) \ rename ( "ReplaceText" , "ExcelReplaceText" ) \ exclude( "IFont" , "IPicture" ) no_dual_interfaces |
#import指令会从指定的可执行文件,动态链接库等COM组件中导出类型库(type lib),在Debug和Release临时目录中生成对应的类型库头文件(type lib header file),以供C++程序使用。如以上三条指令在编译后会生成excel.tlh, mso.lh和vbetext.olb三个头文件,可以在Debug和Release目录中找到。
2.访问Excel暴露的COM对象
下面是一段比较完整的访问Excel的实例代码。首先用生成的数据填充单元格,然后用这些单元格的数据生成了一个图表(Chart):
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
|
try { Excel::_ApplicationPtr pExcelApp; HRESULT hr = pExcelApp.CreateInstance(L "Excel.Application" ); ATLASSERT(SUCCEEDED(hr)); pExcelApp->Visible = true ; // make Excel’s main window visible Excel::_WorkbookPtr pWorkbook = pExcelApp->Workbooks->Open(lpszPathName); // open excel file Excel::_WorksheetPtr pWorksheet = pWorkbook->ActiveSheet; pWorksheet->Name = L "Chart Data" ; Excel::RangePtr pRange = pWorksheet->Cells; const int nplot = 100; const double xlow = 0.0, xhigh = 20.0; double h = (xhigh-xlow)/( double )nplot; pRange->Item[1][1] = L "x" ; // read/write cell’s data pRange->Item[1][2] = L "f(x)" ; for ( int i=0;i<nplot;++i) { double x = xlow+i*h; pRange->Item[i+2][1] = x; pRange->Item[i+2][2] = sin (x)* exp (-x); } Excel::RangePtr pBeginRange = pRange->Item[1][1]; Excel::RangePtr pEndRange = pRange->Item[nplot+1][2]; Excel::RangePtr pTotalRange = pWorksheet->Range[(Excel::Range*)pBeginRange][(Excel::Range*)pEndRange]; Excel::_ChartPtr pChart = pExcelApp->ActiveWorkbook->Charts->Add(); // refer to : // http://msdn.microsoft.com/en-us/library/microsoft.office.tools.excel.chart.chartwizard(v=vs.80).aspx pChart->ChartWizard( (Excel::Range*)pTotalRange, ( long )Excel::xlXYScatter, 6L, ( long )Excel::xlColumns, 1L,1L, true , L "My Graph" , L "x" ,L "f(x)" ); pChart->Name = L "My Data Plot" ; pWorkbook->Close(VARIANT_TRUE); // save changes pExcelApp->Quit(); } catch (_com_error& error) { ATLASSERT(FALSE); ATLTRACE2(error.ErrorMessage()); } |
在这段代码中,Excel::_ApplicationPtr , Excel::_WorkbookPtr 和 Excel::_WorksheetPtr 等均是Visual C++ 编译器根据#import指令自动生成的智能指针,实际上就是C++模板类_com_ptr_t<T>的typedef,其定义可在excel.tlh等类型库头文件中找到。
另外,由于#import指令中没有指定raw_interface_only修饰符,Visual C++对Excel的COM接口进行了适当的封装,以简化COM接口属性和方法的调用,并且将HRESULT返回值都转换成了C++异常,因此,上面的这段代码不需要每一步都坚持HRESULT,而是改为捕获C++异常。
使用C++读写Excel的更多相关文章
- MFC vs2012 Office2013 读写excel文件
近期在忙一个小项目(和同学一起搞的),在这里客户要求不但读写txt,而且可以读写excel文件,这里本以为很简单,结果...废话少说,过程如下: 笔者环境:win7 64+VS2012+Office2 ...
- C# 使用 NPOI 库读写 Excel 文件(转载)
NPOI 是开源的 POI 项目的.NET版,可以用来读写Excel,Word,PPT文件.在处理Excel文件上,NPOI 可以同时兼 容xls 和 xlsx.官网提供了一份Examples,给出了 ...
- Python3.4如何读写Excel
在python3.x(散仙使用的版本是python3.4)里,我们应该如何操作excel. 首先在python3.4里,我们可以使用新的python类库,来支持3.x之后的读写excel 针对 03版 ...
- 用Python读写Excel文件(转)
原文:google.com/ncr 虽然天天跟数据打交道,也频繁地使用Excel进行一些简单的数据处理和展示,但长期以来总是小心地避免用Python直接读写Excel文件.通常我都是把数据保存为以TA ...
- 使用NPOI读写Excel、Word
NPOI 是 POI 项目的 .NET 版本.POI是一个开源的Java读写Excel.WORD等微软OLE2组件文档的项目. 使用 NPOI 你就可以在没有安装 Office 或者相应环境的机器上对 ...
- 【原创】.NET读写Excel工具Spire.Xls使用(1)入门介绍
在.NET平台,操作Excel文件是一个非常常用的需求,目前比较常规的方法有以下几种: 1.Office Com组件的方式:这个方式非常累人,微软的东西总是这么的复杂,使用起来可能非常不便,需要安装E ...
- 【原创】.NET读写Excel工具Spire.Xls使用(2)Excel文件的控制
本博客所有文章分类的总目录:http://www.cnblogs.com/asxinyu/p/4288836.html .NET读写Excel工具Spire.Xls使用文章 ...
- 【原创】.NET读写Excel工具Spire.Xls使用(3)单元格控制
本博客所有文章分类的总目录:http://www.cnblogs.com/asxinyu/p/4288836.html .NET读写Excel工具Spire.Xls使用文章 ...
- 【原创】.NET读写Excel工具Spire.Xls使用(4)对数据操作与控制
本博客所有文章分类的总目录:http://www.cnblogs.com/asxinyu/p/4288836.html .NET读写Excel工具Spire.Xls使用文章 ...
- 【原创】.NET读写Excel工具Spire.Xls使用(5)重量级的Excel图表功能
本博客所有文章分类的总目录:http://www.cnblogs.com/asxinyu/p/4288836.html .NET读写Excel工具Spire.Xls使用文章 ...
随机推荐
- vim使用指北 ---- Advanced Editing
本节介绍vi和ex的一些高级功能. 配置vi 配置文件.exrc可以保存在你的主目录下,在vi启动的时候执行这个配置文件.但在当前工作目录下可以放置一个配置文件,对当前目录做一个自定义配置. :set ...
- Android 内存剖析 – 发现潜在问题
简介 移动平台上的开发和内存管理紧密相关.尽管随着科技的进步,现今移动设备上的内存大小已经达到了低端桌面设备的水平,但是现今开发的应用程序对内存的需求也在同步增长.主要问题出在设备的屏幕尺寸上-分辨率 ...
- Javascript Arguments,calle,caller,call,apply
一.Arguments 该对象代表正在执行的函数和调用他的函数的参数. [function.]arguments[n] 参数function :选项.当前正在执行的 Function 对象的名字. n ...
- SELECT 语句不详解
INSERT INTO ... SELECT 语句, 将查询的结果插入到一张新表中(可为临时表) DECLARE @MyTable Table ( SalesOrderID int, Custome ...
- (9)nehe教程3--添加颜色
添加颜色: 作为第二课的扩展,我将叫你如何使用颜色.你将理解两种着色模式,在左图中,三角形用的是光滑着色,四边形用的是平面着色. 上一课中我教给您三角形和四边形的绘制方法.这一课我将教您给三角形和四边 ...
- UVA 1362 Exploring Pyramids 区间DP
Archaeologists have discovered a new set of hidden caves in one of the Egyptian pyramids. The decryp ...
- UVA 10892 LCM Cardinality 数学
A pair of numbers has a unique LCM but a single number can be the LCM of more than one possiblepairs ...
- JavaScript中函数的形参和实参的实现原理剖析
我们都知道JS里面参数的传递是可以不一样的,比如我们有一个函数: <script type="text/javascript"> function one(a,b,c) ...
- 李洪强iOS开发之添加手势
李洪强iOS开发之添加手势 02 - 添加手势
- php 实现树形结构
<?phpclass Tree{ private $OriginalList; public $pk;//主键字段名 public $parentKey;//上级id字段名 public $ch ...