目的:打开excel2003文件并操作
过程:(1)用classwizard导入Excel2000的接口类xl5chs32.olb,生成xl5chs32.h,xl5chs32.cpp
(2)编写代码如下:
#include "xl5chs32.h"
void CExcelDlg::OnButton1() 
{ Application app; if(!app.CreateDispatch("Excel.Application")) 

AfxMessageBox("无法启动Excel服务器!"); 
return; 
}  app.SetVisible( COleVariant((short)TRUE) ); //使Excel可见  Workbooks books;
         //*******************************************************************//
         //执行下一句中的app.Workbooks(COleVariant((short)1 ))会提示找不到成员
         //问题就是不知道Workbooks的参数是什么?而excel2000的的此函数没有参数啊!
books.AttachDispatch(app.Workbooks(COleVariant((short)1 )).pdispVal,TRUE);
         //*******************************************************************//
        COleVariant vtNULL((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
books.Open(COleVariant("c:\\客户信息汇总表.xls"),vtNULL,vtNULL,vtNULL,vtNULL,vtNULL,
vtNULL,vtNULL,vtNULL,vtNULL,vtNULL,vtNULL);}哪位大侠指点一下,谢谢!

解决方案 »

  1.   

    你用Excel2000的类型库调用Excel2003当然可能出现不兼容了,app.Workbooks(COleVariant((short)1 ))提示找不到成员,说明在Excel2003已经去掉了这个函数。试试导入Excel2003的类型库
      

  2.   

    sorry,写错了,导入的就是excel2003的接口库,xl5chs32.olb
    1)用classwizard导入Excel2003的接口类xl5chs32.olb
      

  3.   

    _Application app;
    Workbooks books;
    _Workbook book;
    Worksheets sheets;
    _Worksheet sheet;
    // load excel application
    if(!app.CreateDispatch(_T("Excel.Application")))
    {
    throw;
    }
    // initial status
    app.SetUserControl(FALSE);
    app.SetDisplayAlerts(FALSE); books.AttachDispatch(app.GetWorkbooks());
    book.AttachDispatch(books.Add((_variant_t)(lpFileName)));
    sheets.AttachDispatch(book.GetWorksheets());
      

  4.   

    楼上的,我需要的excel2003的例子程序///////////////////////////////////
    books.AttachDispatch(app.GetWorkbooks());
    //////////////////////////////////
    excel2003的接口库xl5chs32.olb,已经没有GetWorkbooks这个接口了,而取而代之的是Workbooks(Variant)接口,我就是不知道其中的参数填写什么合适?,谢谢!
      

  5.   

    各位朋友,我找到解决办法了
    (1)在用classwizard生成的xl5chs32.h,加入接口
    VARIANT Workbooks();
    (2)xl5chs32.cpp,加入接口实现
    VARIANT Application::Workbooks()
    {
    VARIANT result;
    GetProperty(0x23c, VT_VARIANT, (void*)&result);
    return result;
    }
    (3)这样调用时候就不用参数了,就可以实现打开excel文件了
    (4)代码如下:
    Application app; if(!app.CreateDispatch("Excel.Application")) 

    AfxMessageBox("无法启动Excel服务器!"); 
    return; 
    }  app.SetVisible( COleVariant((short)TRUE) ); //使Excel可见  Workbooks books;
    ///////////////////////////////////////////////
    //如下的app.Workbooks()调用时候不在需要参数了
    books.AttachDispatch(app.Workbooks().pdispVal,TRUE);
    /////////////////////////////////////////////// COleVariant vtNULL((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
    books.Open(COleVariant("c:\\客户信息汇总表.xls"),vtNULL,vtNULL,vtNULL,vtNULL,vtNULL,
    vtNULL,vtNULL,vtNULL,vtNULL,vtNULL,vtNULL);(5)结论:classwizard生成的接口文件不全。