delphi使用ole无法调用excel,提示错误: interface not supported

small_well 2009-04-18 10:03:55
开发平台:winxp+delphi7+mssql2005+office2003,使用平台:winxp(不太确定)+excel2002(office xp)和wps
问题原因:
在本地开发的过程中,没有出现过调用不出Excel的问题.但是,在使用平台上,点击调用excel的那段代码就失败了.
排除了com的问题.我在本地又安装了offic xp,在注册表中看到excel.application的clsid与客户电脑中的clsid是一致的,根据ms官方的信息,progid是一致的,通过clsid来调取相应的应用程序.那么,应该不是com的问题了.(ole32.dll)
因为,客户的电脑上没有安装开发环境,无法获取异常信息,所以无法直接知道哪个地方出问题了.
请大家帮帮忙,看看是否有曾经遇到过这种问题的!谢谢大家!
btw:最好不要提示我重装系统哦!^-^
调用excel的代码如下:
uses
comobj;
var
ExcelApp:variant;
try
try
ExcelApp:= CreateOleObject('Excel.Application');
except
ExcelApp:= CreateOleObject('Et.Application');
end;
except
Application.MessageBox('请确定已安装“Microsoft Excel”或“WPS表格”!','导出错误',Mb_ok+Mb_IconError);
abort;
end;
...全文
2516 32 打赏 收藏 转发到动态 举报
写回复
用AI写文章
32 条回复
切换为时间正序
请发表友善的回复…
发表回复
qdlover 2010-12-14
  • 打赏
  • 举报
回复
我也碰到类似问题了

郁闷,代码是几年前的代码,最近陆续有用户反映有这个问题,重装下系统又没事,问题是我不能给所有用户都重装系统啊
small_well 2009-04-22
  • 打赏
  • 举报
回复
结帖结帖!
最终问题还是未解决,有点小遗憾!~~
small_well 2009-04-21
  • 打赏
  • 举报
回复
[Quote=引用 28 楼 unsigned 的回复:]
也有可能是Office软件安装不完全或者损坏的问题.
[/Quote]
嗯,我估计可能是这种原因!谢谢了!
僵哥 2009-04-21
  • 打赏
  • 举报
回复
也有可能是Office软件安装不完全或者损坏的问题.
small_well 2009-04-21
  • 打赏
  • 举报
回复
不是跨线程使用,就是在一个程序中使用.没有使用多线程.
就是直接使用
uses
comobj;
var
ExcelApp:variant;
try
try
ExcelApp:= CreateOleObject('Excel.Application');
except
ExcelApp:= CreateOleObject('Et.Application');
end;
except
Application.MessageBox('请确定已安装“Microsoft Excel”或“WPS表格”!','导出错误',Mb_ok+Mb_IconError);
abort;
end;
可以看做这个程序就执行这一段代码即可!
哎,还是没找出错误.
small_well 2009-04-21
  • 打赏
  • 举报
回复
还有人提供意见吗?
没有的话,就结帖了!
僵哥 2009-04-19
  • 打赏
  • 举报
回复
[Quote=引用楼主 small_well 的帖子:]
开发平台:winxp+delphi7+mssql2005+office2003,使用平台:winxp(不太确定)+excel2002(office xp)和wps
问题原因:
在本地开发的过程中,没有出现过调用不出Excel的问题.但是,在使用平台上,点击调用excel的那段代码就失败了.
排除了com的问题.我在本地又安装了offic xp,在注册表中看到excel.application的clsid与客户电脑中的clsid是一致的,根据ms官方的信息,progid是一致的,通过clsid来调取相应的应用程序.那么,应该不是c…
[/Quote]
能否说清楚具体的使用方法,比如是不是跨线程使用,A线程CreateOleObject,然后在B线程当中使用?简单一点就是在日志当中记录线程号。在这种情况下初始化套间时不要使用OleInitialize,换用CoInitializeEx(Nil,COINIT_MULTITHREADED)。如果你的代码当中有调用CoInitializeEx(Nil,COINIT_MULTITHREADED),请检查返回值是否调用成功,如果调用失败,并返回RPC_E_CHANGED_MODE,则可能是在其它模块,包括三方DLL当中初始化过COM套间,如果可行的话,建议重新初始化,如果不能重新初始化,最好在使用的Excel的线程当中CreateOleObject。
small_well 2009-04-18
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 jiangsheng 的回复:]
OLE的初始化在哪里
[/Quote]
不太明白,能否解释一下.
实在不好意思,不是不愿意上网搜索,确实该用的方法都用了,不知道该怎么办才发帖问的.
OLE初始化指的是什么?

能否指明一下方向,让我知道该向哪方面努力?我可以自己去搜索的!
mathsfan 2009-04-18
  • 打赏
  • 举报
回复
帮顶,幸好我的客户到是都能正常访问的...
蒋晟 2009-04-18
  • 打赏
  • 举报
回复
OLE的初始化在哪里
small_well 2009-04-18
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 jiangsheng 的回复:]
可能用的不是excel支持的线程套间
[/Quote]
可不可以说的详细点?谢谢!
本人比较菜!
蒋晟 2009-04-18
  • 打赏
  • 举报
回复
可能用的不是excel支持的线程套间
small_well 2009-04-18
  • 打赏
  • 举报
回复
我自己开始的猜测:
注册表:
\machine\software\classes\excel.application
clsid:{00024500-0000-0000-C000-000000000046}
\root\clsid:{00024500-0000-0000-C000-000000000046}
在本地开发的电脑上与客户的电脑上的注册表上:上述的信息一致.
所以猜测不是com的问题.
不知道大家还有什么其他的思路?
small_well 2009-04-18
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 bdmh 的回复:]
应该还是机器office的环境问题,如果你在客户机上安装office的话,应该就不会这种问题,除非office被破坏
[/Quote]
谢谢bdmh!
客户机上安装了office了.我在开始的时候写了(office xp和wps都安装了),我知道可能是offic被破坏了.但是,客户机上直
接打开excel没有任何问题,只是使用excel.application调不出程序来.我想弄明白的是,这究竟是什么问题?所以我说不想重
装了事!
用google搜了半天,都没有发现类似的问题,有的话也没有具体的解决方案.我想把这个问题搞清楚:倒底问题出在何处?
希望大家能够出出主意!
谢谢!
small_well 2009-04-18
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 de410 的回复:]
安装MDAC试试
[/Quote]
我看了一下,MDAC涉及的问题包括: Microsoft ActiveX 数据对象 (ADO),OLE DB 和 ODBC。怪我没有说清楚,客户端的电
脑查询服务器端的数据没有问题,是不是可以意味着ADO是正常的?那么,MDAC还有重装的必要吗?这台电脑是重装过系统的!

bdmh 2009-04-18
  • 打赏
  • 举报
回复
应该还是机器office的环境问题,如果你在客户机上安装office的话,应该就不会这种问题,除非office被破坏
small_well 2009-04-18
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 de410 的回复:]
安装MDAC试试
[/Quote]
谢谢了!请问你是指的MDAC.exe文件?这个东西如何安装?
small_well 2009-04-18
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 soweb 的回复:]
开发用office2003,使用为什么是excel2002(office xp)和wps
[/Quote]
我写的意思仅仅是我开发时,使用上述代码调用excel没问题(本地的环境是什么),客户机子上安装什么版本的office,其实
问题不大的.都是使用excel.application(微软自己会处理调用的,知道调用哪个clsid的).wps:是针对电脑上没安装ms
office,但是安装了wps office而准备的.
de410 2009-04-18
  • 打赏
  • 举报
回复
安装MDAC试试
soweb 2009-04-18
  • 打赏
  • 举报
回复
开发用office2003,使用为什么是excel2002(office xp)和wps
加载更多回复(12)

1,184

社区成员

发帖
与我相关
我的任务
社区描述
Delphi Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧