龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 软件开发 > VC开发 >

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

时间:2009-12-30 15:42来源:未知 作者:admin 点击:
分享到:
#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_r

#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();

  四、正式开始

  1.操作Excel,首先要初始化一个应用程序实例,代码如下:

  _ApplicationPtr pApp;

  pApp.CreateInstance(L"Excel.Application");pApp->PutVisible(0,VARIANT_TRUE);

  使用ADO操作过数据库的人对代码的前两句不会感到陌生,初始化的实例不同而已,而第三句,则是使Excel应用程序显示出来,就像在“开始”菜单中运行Excel一样,可以看到一个打开的Excel程序,如果赋值VARIANT_FALSE则看不到应用程序,但是在任务管理器中已经创建了一个EXCEL进程,这是前两句的功劳。程序结束前退出应用程序:pBook.PutSaved(0,VARIANT_TRUE);pApp->Quit();

  2.在这个空白的应用实例中,需要创建一个工作簿(即文档)。代码如下:WorkbooksPtr pBooks = pApp->GetWorkbooks();_WorkbookPtr pBook = pBooks->Add((long)xlWorkbook);前面讲过,在应用实例中有一个工作簿集合,就算初始时集合是空的,它也是存在的,要创建一个工作簿,实际就是在这个集合中添加一个工作簿而已,第一句代码获得工作簿集合,第二句添加一个工作簿,并返回新创建工作簿的指针。由于一个工作簿对应一个“xls”文件,所以,大部分情况下我们在一个应用实例中都只会创建一个工作簿,这和习惯有关,但不是绝对,如果添加了多个,可以使用_WorkbookPtr Workbooks::GetItem(const _variant_t & Index)这个函数来获得每个工作簿的指针。

  通过Studio的提示功能,我们看到Add函数的原型:Excel::_WorkbookPtr Excel::Workbooks::Add(const _variant_t & Template,long lcid = 0)在Microsoft Excel帮助中,从“方法”,“A”,“Add”找到“应用于 Workbooks 对象的 Add 方法”,我们可以看到对第一个参数的说明(前面说过,由于VC缺少这类函数的说明,我们只能借助VB了),这个说明对VC同样适用。小弟水平有限,没有弄清第二个参数的所以然,姑且使用默认值,在这里不影响对Excel的操作,这个参数大概是与COM机制有关的某个东西吧。

精彩图集

赞助商链接