在VC中使用智能指针操作Excel(2)
#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机制有关的某个东西吧。
- 上一篇:Visual C++剪贴板操作不完全攻略
- 下一篇:为按钮设置图标(VC)