在VC中使用智能指针操作Excel
2010-04-03 20:35:54 来源:WEB开发网最近的一个工程中,需要将数据导入Excel表格中,项目经理知道我以前没有接触过操作Excel的经验,于是给了一段小程序给我,让我参考着做。
这段程序是使用智能指针操作Excel,在网络上找了一个星期,居然没有一片关于智能指针操作Excel的文章,只有Automation技术,而且所有介绍Automation技术的文章都是大同小异,并且代码多,说明少。没有任何帮助,光有一堆代码,对于理解和使用没有太大的帮助。在这样一个艰苦的条件下,我决定利用手中仅有的工具:Microsoft Excel Visual Basic 参考 和 Microsoft Visual Studio 2005的提示功能,摸索出一些利用智能指针操作Excel的心得,写出来,既是一次总结,也是一种分享,并且摸索还在继续,心得也还陆续会有。
一、背景说明
1.Microsoft Excel Visual Basic 参考是提供给VB程序员的一个操作Excel的帮助,帮助中的对象、集合、方法、常量都已经在COM中实现,在VC中可以找到对应的实体。
2.既然是智能指针,那么绝大多数的操作都是“->”,然而,如果安装了Visual Assist X,使用“->”操作符的时候,是得不到任何提示的。这个时候,如果需要查看提示,则可以先使用“.”操作符,编译时再将“.”改成“->”。
二、Excel概念介绍从MFC工程结构的角度来看,Excel属于多文档视图结构,一个应用程序包含若干个文档,称作工作簿,每个文档中包含若干个工作表。从智能指针对象模型来看可以做如下划分:
1._ApplicationPtr :该对象即表示一个Excel应用程序。
2. WorkbooksPtr :在一个_ApplicationPtr对象中,包含一个工作簿集合。
3. _WorkbookPtr :在工作簿集合中包含若干的工作簿对象。一个工作簿对象对应一个xls文件。
4. WorksheetsPtr :在一个工作簿对象中,包含一个工作表集合。
5. _WorksheetPtr :在工作表集合中包含若干个工作表对象,工作表对象是操作Excel的基本单位。
6. Range :这是一个集合,工作表中单元格的集合,控制对单元格的操作。
三、准备工作1. 加载动态库。#define OFFICEXP 1
#define OFFICE2000 2
// 如果使用OFFICE2000的内核,手动将此处改为#define OFFICE_VER OFFICE2000
#define OFFICE_VER OFFICEXP
#define USE_PROGID 1
#define USE_LIBID 0
#define _M2STR(x) #x
#define M2STR(x) _M2STR(x)
#ifndef MSDLL_PATH
#if OFFICE_VER == OFFICEXP
#define _MSDLL_PATH "C:Program FilesCommon FilesMicrosoft SharedOffice11MSO.DLL"
#elif OFFICE_VER == OFFICE2000
#define _MSDLL_PATH "C:Program FilesMicrosoft OfficeOfficeMSO9.dll"
#endif
#else
#define _MSDLL_PATH M2STR(MSDLL_PATH)
#endif
#import _MSDLL_PATH rename("RGB", "MSRGB")
#ifdef VBE6EXT_PATH
#import M2STR(VBE6EXT_PATH)
#else
#import "C:Program FilesCommon FilesMicrosoft SharedVBAVBA6VBE6EXT.OLB"
#endif
#if USE_PROGID
#import "progid:Excel.Sheet" auto_search auto_rename rename_search_namespace("Office10")
#elif USE_LIBID
#import "libid:{00020813-0000-0000-C000-000000000046}" auto_search auto_rename version(1.3) lcid(0) no_search_namespace
#else
#ifndef MSEXCEL_PATH
#if OFFICE_VER == OFFICEXP
#define _MSEXCEL_PATH "C:Program FilesMicrosoft OfficeOffice11excel.exe"
#elif OFFICE_VER == OFFICE2000
#define _MSEXCEL_PATH "C:Program FilesMicrosoft OfficeOfficeexcel.exe"
#endif
#else
#define _MSEXCEL_PATH M2STR(MSEXCEL_PATH)
#endif
#import _MSEXCEL_PATH auto_search auto_rename dual_interfaces
#endif
using namespace Excel;
2.初始化COM组件。
CoInitialize(NULL);程序结束时记得释放资源CoUninitialize();
更多精彩
赞助商链接