• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >vc/mfc > VC++Excel操作编译错误

VC++Excel操作编译错误

作者:佚名 字体:[增加 减小] 来源:互联网 时间:2017-06-04

佚名通过本文主要向大家介绍了vc++ excel,vc++错误,vc++6.0编译器下载,vc++6.0编译器,vc++反编译等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题: VC++ Excel 操作 编译错误
描述:

我在通过自动化调用Excel时遇到了问题,希望高手帮忙解决一下。  
  开发用的环境是Windows  xp  sp2,  Visual  studio  2005,  Office2003  
  以前用Visual  studio  2002  和  2003  都没有问题,通过导入类型库调用  
  Excel一点问题都没有,但是使用VS2005问题就出来,google了半天,  
  也有人遇到同样问题,但是没有任何有效的解决办法。估计是2005才出来  
  的原因吧。  
    
  问题描述如下:  
  通过VS2005的添加类功能,选择Typelib类添加,  
  选择“Microsoft  Excel  11.0  Object  Library <1.5>”  
  选择接口_Application,  _Workbook,  _Worksheet,  
  由接口生成类CApplication,  CWorkbook,  CWorksheet.  
  如果单纯使用这三个类的话也没有什么问题,一切和以前一样没有问题。  
  但是如果选择接口Workbooks,Worksheets,生成类CWorkbooks,  CWorksheets.  
  这个时候问题就出现了。  
  由此生成的头文件前面都加上了#import  "C:\\Program  Files\\Microsoft  Office\\OFFICE11\\EXCEL.EXE"  
  这和以前的版本是不一样的,以前的VS版本没有这一句,应该是VS2005的新特性。  
  就这么使用的话,一编译会出现大量的错误,  
  由以前的经验可以知道是由于命名冲突导致的。于是使用rename进行重命名,  
  以前的错误虽然不出现了,但是又出现新的错误,于是定义namespace,还是不行,  
  我基本上所有能想到的组合都使用过了,还是错误。  
  试验中的头文件一部分代码如下:  
  #import  "C:\\Program  Files\\Common  Files\\Microsoft  Shared\\OFFICE11\\MSO.DLL"  \  
          rename("RGB",  "ExclRGB")  \  
          rename("DocumentProperties",  "ExclDocumentProperties")  \  
          rename("SearchPath",  "ExclSearchPath")  
    
  #import  "C:\\Program  Files\\Common  Files\\Microsoft  Shared\\VBA\\VBA6\\VBE6EXT.OLB"    
    
  #import  "C:\\Program  Files\\Microsoft  Office\\OFFICE11\\EXCEL.EXE"  \  
          rename("DialogBox",  "ExclDialogBox")  \  
          rename("RGB",  "ExclRGB")  \  
          rename("CopyFile",  "ExclCopyFile")  \  
          rename("ReplaceText",  "ExclReplaceText")  
    
  using  namespace  Excel;  
    
  察看了自动生成的头文件CWorkbooks.h里面的一个函数  
  Application  get_Application()  
  {  
  Application  result;  
  InvokeHelper(0x94,  DISPATCH_PROPERTYGET,  VT_DISPATCH,  (void*)&result,  NULL);  
  return  result;  
  }  
  而VS2005以前的版本生成的代码如下:  
  LPDISPATCH  get_Application()  
  {  
  LPDISPATCH  result;  
  InvokeHelper(0x94,  DISPATCH_PROPERTYGET,  VT_DISPATCH,  (void*)&result,  NULL);  
  return  result;  
  }  
  当然还有其他的不同。  
  估计就是由这个新类型Application导致的问题。  
    
  如果头文件不做任何修改如下  
  #import  "C:\\Program  Files\\Microsoft  Office\\OFFICE11\\EXCEL.EXE"  no_namespace  
  那么产生的一部分代表性错误如下:  
  c:\work\powerpointautomation\autoproject\autoproject\capplication.h(3)  :  warning  C4278:  'RGB':  identifier  in  type  library  'C:\\Program  Files\\Microsoft  Office\\OFFICE11\\msppt.olb'  is  already  a  macro;  use  the  'rename'  qualifier  
    
  c:\work\powerpointautomation\autoproject\autoproject\debug\msppt.tlh(414)  :  error  C2371:  'FontPtr'  :  redefinition;  different  basic  types  
    
  c:\program  files\microsoft  visual  studio  8\vc\include\comdef.h(312)  :  see  declaration  of  'FontPtr'  
    
  c:\work\powerpointautomation\autoproject\autoproject\debug\msppt.tlh(1130)  :  error  C2146:  syntax  error  :  missing  ';'  before  identifier  'GetRGB'  
    
  c:\work\powerpointautomation\autoproject\autoproject\debug\msppt.tlh(1963)  :  error  C2061:  syntax  error  :  identifier  'MsoRGBType'  
  这个问题困扰我很长时间了。微软这套东西是越来越复杂化,这样下去完全跟不上了。  
  请高手帮组解决这个问题。谢谢大家。 


解决方案1:

#import "C:\Program Files\Common Files\Microsoft Shared\OFFICE11\mso.dll" rename("RGB", "MSRGB")
#import "C:\Program Files\Common Files\Microsoft Shared\VBA\VBA6\VBE6EXT.OLB" raw_interfaces_only, rename("Reference", "ignorethis"), rename("VBE", "testVBE")
#import "D:\\Program Files\\Microsoft Office\\OFFICE11\\EXCEL.EXE" exclude("IFont","IPicture"), rename("RGB", "ignorethis"), rename("DialogBox", "ignorethis"), rename("VBE", "testVBE"), rename("ReplaceText", "EReplaceText"), rename("CopyFile","ECopyFile"), rename("FindText", "EFindText"), rename("NoPrompt", "ENoPrompt")
这样就可以了,我在vs2008中使用正常的,我这里也有一个导出了application,worksheet等类的头文件,如果你需要我可以发给你,我的excel在D盘


分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 用VC++如何选取Excel指定的某整行,整列
  • 用VC++对EXCEL进行创建,存取如何进行,很急谢谢
  • 用VC++连excle时出现的问题
  • 关于应用VC++调用EXCEL开发列表的问题!
  • VC++2005下导入Excel的TypeLibrary类型库问题
  • VC++操作excel
  • VC++Automation隐藏Excel菜单条问题
  • VC++设置excel表单的名称
  • VC++通过OLE调用EXCEL
  • vc++如何创建excel文件

相关文章

  • 2017-06-05 管道的读写问题让我摸不着头脑!
  • 2017-06-05 线程终止后,程序自动分配的线程堆栈内存如何才能安全释放,高手指点,告急!!!
  • 2017-06-05 JS调用VC函数如何取得返回值?
  • 2017-06-05 高手给我一点指点
  • 2017-06-05 如何从dll中读取数量不确定的参数啊?
  • 2017-06-04 TeechartProActiveX8005在三维模式中,如和给Depth轴增加箭头
  • 2017-06-04 求助!!!activex导致ie关闭时出错
  • 2017-06-05 VC++开发Activex控件用localhost能访问而用ip就不能访问
  • 2017-06-04 这些输出什么意思?怎么解决?
  • 2017-06-05 咋样把程序注册成服务?

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • DLL中使用ADO的问题,大家帮忙看看
    • VC的dll问题
    • BHO使用insertAdjacentHTML插入JS文件,IE6没错,但在IE7里总是提示“无效字符”,是怎么回事呢?
    • 关于进程外服务器和死机的问题
    • 请教-让播放器播放自定义的视频格式-就是写个解码器
    • 在VC7里面做控件,如何删除automationmethod\property以及activexevent?
    • 如何设置EXCEL进程的工作簿/表单/单元格的编辑允许或禁止
    • 地图控件的编程问题?高手进,高分送!
    • 一个接口带有两个返回值,在ASP里调用,是否能通过
    • 为什么将xml文件读到CString中有字符丢失啊?

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有