请问怎样使用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() ;不知道哪位老大能解释一下子?

解决方案 »

  1.   

    方法没有错,看头文件是否没有加(形如#include "msword9.h")
      

  2.   

    #define USE_OFFICEXP
    #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
      

  3.   

    我以前写过一个例子,具体步骤部分,请参考下文:二 创建应用程序  【详细步骤】
    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. 分别为这两个函数添加如下处理代码: