Office启动时 CreateDispatch函数返回FALSE

        当你需要打开或者生成一个doc/xls文件,需要调用Office(WPS)。我在使用过程中一直遇到一个问题,在部分电脑上启动服务时失败,部分电脑可以通过修复注册表来解决,部分电脑修改注册表也解决不了。如果你知道解决方案请不吝赐教。

        如果你也遇到了,希望以下我的经验能给你一点点帮助。

        输出一个.xlsx文件,第一步根据文件默认打开方式判断用户安装的软件版本(office还是wps),第二步根据软件版本传递对应参数调用CreateDispatch。

BOOL bRet = CreateDispatch("Excel.Application", pErr); bRet是FALSE,打开失败。

        第一步判断软件版本,查找“.xlsx”的打开方式。

检查HKEY_CURRENT_USER目录下"\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.xlsx"。

如果没有再检查HKEY_CLASSES_ROOT目录下“\.xlsx”。

取到启动调用的exe名称,Excel.exe(Excel)、ET.exe(WPS)。

        第二步检查启动Application的注册表项。

注册表中搜索“Excel.Application”,下级节点CurVer值为“Excel.Application.12”。

再搜索“Excel.Application.12”,你会看到CLSID “00024500-0000-0000-C000-000000000046”,这个CLSID在多个位置出现,它就是Excel COM注册的唯一ID。CLSID下级节点LocalServer32中会看到Excel.exe绝对路径。系统应该会按这个路径启动excel服务。

        用户WPS启动失败,修改注册表方法。

一、用户HKEY_CURRENT_USER和HKEY_LOCAL_MACHINE缺少注册表项。
解决前先确定  1、  HKEY_CURRENT_USER\Software\Classes\CLSID\{45540001-5750-5300-4B49-4E47534F4655}  有无。  2、[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\KET.Application]  有无。  3、  [HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{45540001-5750-5300-4B49-4E47534F4655}]   有无。

确定缺少的注册表项,从正常电脑注册表中导出.reg文件在用户电脑导入。注意CLSID\{4554...4655}\LocalServer32  要修改值,值为用户机器et.exe路径。

CreateDispatch的第一个参数"Excel.Application":

Excel或WPS兼容MSO模式

"ET.Application":V8

"Ket.Application":V9

"Word.Application":Word或WPS兼容MSO模式

"WPS.Application":V8

"Kwps.Application":V9

检索 COM 类工厂中 CLSID 为 {00024500-0000-0000-C000-000000000046} 的组件失败的解决方案-CSDN博客文章浏览阅读7k次,点赞2次,收藏5次。前言:这个错误也是当时在做项目时遇见的。当时需求是上传文件并计算出页数。当时代码都写好了,在进行上传文件上时浏览器就报错了:COM 类工厂中 CLSID 为 {00024500-0000-0000-C000-000000000046} 的组件失败的解决方案。这个错误实际上就是你的电脑上或者服务器上没有配置office组件,下面给大家介绍解决办法:解决办法:①:首先保证你的电脑上或者服务..._检索 com 类工厂中 clsid 为 {00024500-0000-0000-c000-000000000046} 的组件失败https://blog.csdn.net/GreyCastle/article/details/88385617这个方法如果可行,请告诉我。


再说一下我的解决方案,业务方面要读、写excel文件,引入了libxl库,不再依赖用户安装office或者wps。而word文件只有编辑需求,且不再是常用功能,用户反馈越来越少。如果预算充足可以考虑Aspose.word,不需要依赖office和wps。

  • 21
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
本资源包含两部分,第一部分是WPS OFFICE 2012二次开发FAQ,目录如下,内含部分VC和VB的源码指导,第二部分是WPS Office二次开发帮助文档,详细描述了wps,et,wpp的对象、属性和方法等接口,值得你拥有 1 二次开发的兼容性FAQ.....................................................................................................................3 1.1 WPS Office 2012 的二次开发开发和微软的Office 二次开发有什么异同..........................3 1.1.1 模块对象的区别........................................................................................................... 3 1.1.2 枚举常量的区别........................................................................................................... 3 1.1.3 commandbars 调用的区别............................................................................................. 3 1.2 WPS Office2012 的接口类对象和对应的DLL 文件.............................................................4 1.3 原有的与WPS Office 2003(WPS2003)、WPS Office 2002(WPS2002)、WPS Office2005 (WPS2005)、WPS Office 2007(2007)、WPS Office 2009(2009)结合的第三方程序,可 以直接和WPS Office2012 结合运行吗?.................................................................................... 4 1.4 原有的与WPS Office 2003 或者WPS Office 2002 结合的第三方程序,需要做什么改动 才能正常和WPS Office2012 结合运行?.................................................................................... 4 1.5 调用WPS 接口API 方法要注意Variant 参数类型的传递。.......................................... 5 1.6 通过注册表修改宏代码的安全级别。.................................................................................. 5 2 二次开发文字部分FAQ.....................................................................................................................6 2.1 如何启动WPS 文字模块?....................................................................................................6 2.2 如何退出WPS 文字模块?....................................................................................................6 2.3 如何得到WPS 中的工具栏数?............................................................................................6 2.4 如何隐藏工具栏?..................................................................................................................6 2.5 如何使工具栏的按钮失效?.................................................................................................. 7 2.6 如何获得一个文档?..............................................................................................................7 2.7 如何打开wps 文档?............................................................................................................. 7 2.8 如何关闭一个文档?..............................................................................................................7 2.9 如何保存一个文档?..............................................................................................................7 2.10 如何获得或修改当前用户名?............................................................................................7 2.11 如何在当前文档中添加一个表格?.................................................................................... 8 2.12 如何获取表格的行和列?....................................................................................................8 2.13 如何选中一个表?................................................................................................................8 2.14 如何修改一个表格的某个单元格的内容?........................................................................8 2.15 .如何设置一个表格的单元格的高度和宽度?....................................................................8 2.16 表格增加一行之后,要获取增加表格的内容,必须重新给表格变量赋值.................... 9 2.17 如何添加一个书签?............................................................................................................9 2.18 如何替换一个书签的内容?..............................................................................................10 2.19 如何获取和设置默认打印机?..........................................................................................10 2.20 如何打印一篇已打开的文档?..........................................................................................10 2.21 如何获取和设置某些文字的字体属性?..........................................................................10 2.22 如何获取和设置段落的格式?.......................................................................................... 11 2 2.23 如何通过注册表获取WPS 安装版本及安装路径?........................................................11 2.24 如何在插入对象里添加WPS 文档对象?.......................................................................12 2.25 在WPS 文字中使用Find 的用法...................................................................................... 12 2.26 去掉Find 替换后出现的对话框........................................................................................ 12 2.27 如何通过MIME 设置实现WPS 文字嵌入浏览器的方式打开服务器DOC 或WPS 文档 ...................................................................................................................................................... 12 2.28 如何在不破坏书签的情况下设置内容?..........................................................................13 2.29 为什么在使用Range.Text 为文档、书签,或用FormField.Result 为窗体域设置文本内 容,回车符不见了?............................................................................................................... 13 2.30 如何判断文档的设计模式状态,如何退出设计模式?.................................................. 13 2.31 如何隐藏表格的智能扩展标记?......................................................................................13 2.32 如何通过API 实现不显示表格虚线?............................................................................. 14 3 二次开发电子表格部分FAQ...........................................................................................................14 3.1 如何启动WPS 电子表格模块?..........................................................................................14 3.2 如何退出电子表格?............................................................................................................14 3.3 如何打开一个电子表格文档?............................................................................................ 14 3.4 如何关闭一个电子表格文档?............................................................................................ 15 3.5 如何保存一个电子表格文档?............................................................................................ 15 3.6 如何设置一个单元格的大小?............................................................................................ 15 3.7 如何获取单元格中的内容?................................................................................................ 15 3.8 如何设置单元格中的内容?................................................................................................ 15 3.9 如何设置单元格中的公式?................................................................................................ 16 3.10 如何设置单元格的边框?..................................................................................................16 3.11 如何读取批注的内容.......................................................................................................... 16 3.12 如何添加批注?..................................................................................................................16 3.13 如何设置单元格内字体的属性?......................................................................................17 3.14 如何打印电子表格文档?.................................................................................................... 17 3.15 如何在插入对象里添加WPS 表格对象?.........................................................................17 3.16 WPS 表格中如何在默认位置插入图片..............................................................................18 3.17 WPS 表格中如何插入图表................................................................................................. 18 3.18 通过MIME 设置WPS 表格嵌入浏览器方式打开服务器的et 或xls 文档....................18
用MFC 显示PPT //启动 PowerPoint: void CMainFrame::OnPowerpointStartpowerpoint() { /// Check if the IDispatch connection exists with PowerPoint, // if not create one. if (m_ppt.m_lpDispatch == NULL) { // Create IDispatch connection to PowerPoint. m_ppt.CreateDispatch("PowerPoint.Application"); }; // Bring the PowerPoint application to the front. m_ppt.Activate(); } void CMainFrame::OnPowerpointStartslideshow() { _Presentation oPresentation; SlideShowSettings oShow; // Attach to the Active Presentation. oPresentation.AttachDispatch(m_ppt.GetActivePresentation()); // Attach to the slide-show settings. oShow.AttachDispatch(oPresentation.GetSlideShowSettings()); // Run the slide show. oShow.Run(); } // 创建幻灯片: void CMainFrame::OnPowerpointCreateslide() { // Connect to the active presentation. There is no error trapping. // If the active presentation the framework traps // the error and displays a message box. _Presentation ActivePresentation(m_ppt.GetActivePresentation()); // Connect to the slides collection. Slides oSlides(ActivePresentation.GetSlides()); // This constant is defined in the PowerPoint Object model. // You can use the Object Browser, with Visual Basic Editor // (VBE), to look up the different constant values. const ppLayoutTitleOnly = 11; // Add a new slide to the presentation. This code adds the new // slide to the end of the presentation. oSlides.Add(oSlides.GetCount() + 1l, ppLayoutTitleOnly); } // 创建演示文稿: void CMainFrame::OnPowerpointCreatepresentation() { Presentations PresCollection; // Make sure there is a dispatch pointer for PowerPoint. if(m_ppt.m_lpDispatch == NULL) { // Display a message indicating that PowerPoint is not running. MessageBox("PowerPoint is not running.", "Start PowerPoint"); } else { // Bring PowerPoint to the front. m_ppt.Activate(); // Attach the presentations collection to the PresCollection // variable. PresCollection.AttachDispatch(m_ppt.GetPresentations()); // Create a new presentation. PresCollection.Add(1);

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值