Ole32 createObject“excel.application”在win7 64bits中失败

时间:2013-01-20 22:51:55

标签: haskell com ms-office

我设法使用com1.2.3库,但只有已经打开才能使用excel。

我不知道为什么这段代码不起作用;

main = coRun $ do
     idEx <- createObject "Excel.Application"

我在cmd中遇到了这个错误:

*** Exception: ComException {comException = ComError (-2147467262),
comExceptionMsg = "(0x80004002) This interface is not supported\r\n"}. 

我在win7中看到,从com32启动64b应用程序可能是不可能的。那是对的吗?

任何人都有一个可以从win7启动excel的工作代码吗?

1 个答案:

答案 0 :(得分:1)

好吧,我找到了。我发布在这里,因为有人可能对解决方案感兴趣并可能有灵感。我在某地读到,应该使用coCreateInstance而不是createObject。 所以下面的代码应该激活excel

import System.Win32.Com 
import System.Win32.Com.Automation

iidIDispatch_unsafe  = mkIID "{00020400-0000-0000-C000-000000000046}"

newExcel = coRun $ do 
   clsidExcel <- clsidFromProgID "Excel.Application"
   pIunknown <- coCreateInstance clsidExcel  Nothing LocalProcess iidIDispatch_unsafe
   let pExl = castIface pIunknown :: IDispatch ()
   propertySet "Visible" [inBool True]  pExl