请问怎样使用VC的Active Typed Library来向程序中加入Exel的处理能力?使用OLE/COM Object Viewer查看有关EXEL的COM时,它的组件
coclass Workbook
的uuid(00020819-0000-0000-C000-000000000046)好像在注册表中没看到,因此,下面的代码并不能找到interface _Workbook:// {00020819-0000-0000-C000-000000000046}
extern "C" const CLSID CLSID_Component =
{0x00020819, 0x0000, 0x0000,
{0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46}} ;
// {000208DA-0000-0000-C000-000000000046}extern "C" const CLSID IID_I =
{0x000208DA, 0x0000, 0x0000,
{0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46}} ;interface _Workbook : IDispatch
{
virtual HRESULT OpenLinks(
BSTR Name,
VARIANT ReadOnly,
VARIANT Type,
long lcid) = 0;
};CoInitialize(NULL) ;
_Workbook *pI = NULL; HRESULT hr = NULL;
hr = ::CoCreateInstance(CLSID_Component,
NULL,
CLSCTX_INPROC_SERVER,
IID_I,
(void**)&pI) ; CoUninitialize() ;不知道哪位老大能解释一下子?
coclass Workbook
的uuid(00020819-0000-0000-C000-000000000046)好像在注册表中没看到,因此,下面的代码并不能找到interface _Workbook:// {00020819-0000-0000-C000-000000000046}
extern "C" const CLSID CLSID_Component =
{0x00020819, 0x0000, 0x0000,
{0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46}} ;
// {000208DA-0000-0000-C000-000000000046}extern "C" const CLSID IID_I =
{0x000208DA, 0x0000, 0x0000,
{0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46}} ;interface _Workbook : IDispatch
{
virtual HRESULT OpenLinks(
BSTR Name,
VARIANT ReadOnly,
VARIANT Type,
long lcid) = 0;
};CoInitialize(NULL) ;
_Workbook *pI = NULL; HRESULT hr = NULL;
hr = ::CoCreateInstance(CLSID_Component,
NULL,
CLSCTX_INPROC_SERVER,
IID_I,
(void**)&pI) ; CoUninitialize() ;不知道哪位老大能解释一下子?
#ifdef USE_OFFICEXP
#import "C:\Program Files\Common Files\Microsoft Shared\Office11\MSO.DLL"
#import "c:\\Program Files\\Common Files\Microsoft Shared\\VBA\VBA6\VBE6EXT.olb"
#import "d:\Program Files\Microsoft Office\Office11\MSWORD.olb" rename("ExitWindows","ExitWindowsEx")
#import "d:\Program Files\Microsoft Office\Office11\excel.exe" rename("DialogBox", "DialogBoxXL") rename("RGB", "RBGXL") rename("DocumentProperties", "DocumentPropertiesXL") exclude("IFont","IPicture")
#else
#import "d:\Program Files\Microsoft Office\Office\MSO9.dll"
#import "C:\Program Files\Common Files\Microsoft Shared\VBA\VBA6\VBE6EXT.OLB" no_namespace
#import "d:\Program Files\Microsoft Office\Office\MSWORD9.OLB" rename("ExitWindows","_ExitWindows")
#import "d:\Program Files\Microsoft Office\Office\excel9.olb" rename("DialogBox", "DialogBoxXL") rename("RGB", "RBGXL") rename("DocumentProperties", "DocumentPropertiesXL") exclude("IFont","IPicture")
#endif
1. 用AppWizard 创建一个名为“Embed_Excel”的MFC 应用程序。
2. 在Step1中:选择本应用程序为“Single Document”类型。
3. 在Step2中:使用缺省选项。
4. 在Step3中:选择“Container”作为组合文档类型。
5. Step4、Step5、Step6采用所有缺省选项。
生成的工程中已经有如下这些类生成:
Application: CEmbed_ExcelApp in Embed_Excel.h and Embed_Excel.cpp
Frame: CMainFrame in MainFrm.h and MainFrm.cpp
Document: CEmbed_ExcelDoc in Embed_ExcelDoc.h and Embed_ExcelDoc.cpp
View: CEmbed_ExcelView in Embed_ExcelView.h and Embed_ExcelView.cpp
Container Item: CEmbed_ExcelCntrItem in CntrItem.h and CntrItem.cpp
6. 在View菜单中选择ClassWizard,在选择Automation选项,点击Add Class,选择 From a Type Liberary,找到Micro Excel 97/2000的类型库,即:Excel8.olb/Excel9.olb,将类型库中所有的类都添加到本工程中来。打开FileView,可以发现工程中已经自动添加进来Excel9.h 和 Excel9.cpp两个文件,他们存放着处理Excel文件所需要的类的定义和实现。
【注:Excel8.olb/Excel9.olb一般你的安装路径下,如C:\Program Files\Microsoft Office\Office】
7. 在ResourceView中双击Menu中的IDR_MAINFRAME,在菜单项“编辑”中添加如下两个新选项:
ID_OLE_INSERT_NEW 读取Excel文件(&R)
ID_OLE_READCONTENTS 抽取文本(&T)
8. 分别选中这两个选项,用右键中的选项ClassWizard为它们添加处理函数OnInsertObject()和OnOleReadcontents(),注意在添加时的类名一栏里选择CEmbed_ExcelView。
9. 分别为这两个函数添加如下处理代码: