在VC中使用智能指针操作Excel

最近的一个工程中,需要将数据导入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();

时间: 2024-09-20 00:13:09

在VC中使用智能指针操作Excel的相关文章

C++中auto_ptr智能指针的用法详解_C 语言

智能指针(auto_ptr) 这个名字听起来很酷是不是?其实auto_ptr 只是C++标准库提供的一个类模板,它与传统的new/delete控制内存相比有一定优势,但也有其局限.本文总结的8个问题足以涵盖auto_ptr的大部分内容. auto_ptr是什么? auto_ptr 是C++标准库提供的类模板,auto_ptr对象通过初始化指向由new创建的动态内存,它是这块内存的拥有者,一块内存不能同时被分给两个拥有者.当auto_ptr对象生命周期结束时,其析构函数会将auto_ptr对象拥有

malloc-C语言中的字符指针操作问题,如何释放字符指针空间?

问题描述 C语言中的字符指针操作问题,如何释放字符指针空间? 源码如下: #include #include #include void main() { char s1; char *s2 = "bbb"; char *s3 = "ccc"; s1 = (char)malloc(sizeof(s2)); strcpy(s1, s2); strcat(s1, s3); //free(s2); //free(s3); printf("%s ", s

在Word 2007中使用智能指针功能

智能指针是Word中的一项编程功能,用户可以在Word2007中启用或取消智能指针功能,操作步骤如下所述: 第1步, 打开Word2007文档窗口,依次单击"Office按钮"→"Word选项"按钮,如图2012040307所示. 图2012040307 单击 "Word选项"按钮 第2步,打开"Word选项"对话框,切换到"高级"选项卡.在"编辑选项"区域选中或取消"使用智

智能指针-c++ excel dll 数组输入后如何对数组元素值进行计算?

问题描述 c++ excel dll 数组输入后如何对数组元素值进行计算? 问题是这样的 IDE:visual c++ 2013 community excel:2010 目的:编写excel dll 目前阶段:实现了在excel中单元格输入,单元格输出的函数编写,如a+b 现在想要尝试数组/矩阵输入后,经过一定的计算,以数值输出到单元格,如得到这个数组所有元素的总和之类的. 已知输入 #import "C:Program Files (x86)Common Filesmicrosoft sha

VC中句柄、指针、ID之间的转换

win32直接操作的是句柄HANDLE,每个句柄就对应windows窗口,而vc对HANDLE进行类封装,间接操作的都是HANDLE,现在句柄只是类的一个成员变量. 从句柄到指针 CWnd* pWnd=CWnd::FromHandle(hWnd); //a temporary CWnd object is created //and attached. pWnd->Attach(hWnd); //Attaches a Windows window to a CWnd object 从指针到句柄

C++11中的智能指针

在C++11中,引入了智能指针.主要有:unique_ptr, shared_ptr, weak_ptr. 这3种指针组件就是采用了boost里的智能指针方案.很多有用过boost智能指针的朋友,很容易地就能发现它们之间的关间: unique_ptr scoped_ptr 独占指针对象,并保证指针所指对象生命周期与其一致 shared_ptr shared_ptr 可共享指针对象,可以赋值给shared_ptr或weak_ptr. 指针所指对象在所有的相关联的shared_ptr生命周期结束时结

VC++中使用ADO方式操作ACCESS数据库

ADO(ActiveX Data Object)是Microsoft数据库应用程序开发的新接口,是建立在OLE DB之上的高层数据库访问技术,即使你对OLE DB,COM不了解也能轻松对付ADO,因为它非常简单易用,甚至比你以往所接触的ODBC API.DAO.RDO都要容易使用,并不失灵活性.本文详细地介绍在Visual C++开发环境下如何使用ADO来进行数据库应用程序开发,并给出示例代码.为了使读者朋友都能测试本例提供的代码,我们采用Access数据库,您可以直接在我们提供的示例代码中找到

C++中的auto_ptr智能指针的作用及使用方法详解_C 语言

智能指针(auto_ptr) 这个名字听起来很酷是不是?其实auto_ptr 只是C++标准库提供的一个类模板,它与传统的new/delete控制内存相比有一定优势,但也有其局限.本文总结的8个问题足以涵盖auto_ptr的大部分内容.  auto_ptr是什么? auto_ptr 是C++标准库提供的类模板,auto_ptr对象通过初始化指向由new创建的动态内存,它是这块内存的拥有者,一块内存不能同时被分给两个拥有者.当auto_ptr对象生命周期结束时,其析构函数会将auto_ptr对象拥

C++ 智能指针详解

来源:http://blog.csdn.net/xt_xiaotian/article/details/5714477 一个智能指针就是一个C++的对象, 这对象的行为像一个指针,但是它却可以在其不需要的时候自动删除.注意这个"其不需要的时候", 这可不是一个精确的定义.这个不需要的时候可以指好多方面:局部变量退出函数作用域.类的对象被析构--.所以boost定义了多个不同的智能指针来管理不同的场景. shared_ptr<T> 内部维护一个引用计数器来判断此指针是不是需要