我在vc2005中用添加类的方法,(添加typelib类)添加了 Microsoft Excel 9.0 Object Library<1.3>中的 _Application类,_Workbook类,_Worksheet类,Range类,Workbooks类和Worksheets类,但是在我引用这些类的时候,
_Application mExcelApp;   
Workbooks mExcelBooks;     
_Workbook mExcelBook;   
_Sheets mExcelSheets;   
_Worksheet mExcelSheet;     
Range mExcelRge;  程序报出 e:\......\win32\debug\excel9.tlh(982) : error C2371: 'FontPtr' : 被再定义。基本类型不一致。等共182个错误...我已经在调用他的类前加上了对这些类调用的声明
#include "CApplication.h"
#include "CWorkbooks.h"
#include "CWorkbook.h"
#include "CWorksheet.h"
#include "CWorksheets.h"
#include "CRange.h"大家可以帮我分析一下原因吗?或者还是我引用excel对象的方法有问题呢?谢谢!100分送之

解决方案 »

  1.   

    不是,因为是_Sheets里可能又引用了FontPtr,类似这样的会有好多
    所以你最好选中所有,把所有的类全添加上
    不过这个功能最好用VC6来添加,VC6会把这些类都生成在一个文件,然后把生成的文件拷出来在VS2005下用
    VS2005我没用过,但VS2003会把每个类都生成一个文件,好恶心
      

  2.   

    哦,这样应该是可以,但是生成的类太多了,实际上用的也就是其中的不到10个而已,有没有什么更好的方法来添加这些类呢?
    还有引用后,会出现 #import "C:\\Program Files\\Microsoft Office\\Office\\EXCEL9.OLB" no_namespace的声明,
    如果在其他PC上运行,这个库文件的地址变了,会报出错误。
      

  3.   


    我试了一下你的方法,结果编译时出现error C2065: 'ExcelApp' : 没有被定义。我在引用他的类上已经定义了 #include "excel9.h"找了半天也不知道是为什么
      

  4.   

    #include "excel9.h"
    using namespace ***那个***是什么我也不记得了,你到excel9.h里面看一下,
    还有,不需要管路径的问题,你只要生成excel9.h一次,就可以把那个#import去掉了,不需要再用了
    反它生成的文件拷出来就通用的了,它只是接口列表,跟路径没啥关系
      

  5.   

    http://blog.csdn.net/scq2099yt/category/370448.aspx?PageNumber=2
      

  6.   

    不好意思,公司屏蔽了blog,看不了,如果方便的话,可以把重要的那个部分贴出来吗?
    谢谢
      

  7.   

    我到excel9.h里面看了一下,没有using namespace *** 相关联的内容啊...
      

  8.   

    参考:
    检查VC2005自动生成的”CApplication.h” : #import “C:\\Program Files\\Microsoft Office\\OFFICE11\\EXCEL.EXE” /no_namespace 
    应该rename namespace.
      

  9.   


    可以说的稍微具体一些吗?这条语句应该怎么写好?之前的888atao,说把这句话去了也没有关系
    这条语句要怎么处理才好呢?
      

  10.   

    Office类型库里有些类型定义跟系统冲突,比如Font定义,解决方法:
    #import ".../excel.exe" rename("Font", "oFont")如果别的机器上office路径变化了,可以不使用文件导入法,而使用GUID导入:
    #import "XXXXXXXX-XXXX-..."
      

  11.   

    哦,解决了!找了半天,原来是之前的声明 #include "excel9.h"的位置的问题,把它放到所有声明的最后就可以了!谢谢大家!先散分之!!!但是又出现了一个问题,ExcelApp.Run(_variant_t("CopyRow"),_variant_t((long)10),vtMissing,vtMissing,        
    vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,        
    vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,        
    vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,        
    vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,vtMissing);        这条语句中,出现的_variant_t和vtMissing,我在之前的声明中,添加了#include "comutil.h" 
    但是编译后,会出现连接错误
    PageTitle.obj : error LNK2001:  ""class _variant_t vtMissing" (?vtMissing@@3V_variant_t@@A)" は没有解决这是为什么呢?声明后不能直接用吗?(继续加分)
      

  12.   

    #ifdef _DEBUG
      #pragma comment(lib, "comsuppwd.lib")
    #else
      #pragma comment(lib, "comsuppw.lib")
    #endif