首页 > 其他分享 >Excel的背面(1) — Pywin32调用异常、MSO与KET之争

Excel的背面(1) — Pywin32调用异常、MSO与KET之争

时间:2024-09-22 17:12:09浏览次数:1  
标签:调用 0000 Office Excel Pywin32 WPS MSO Application

在上一篇博文中我提到了Excel批注有关的问题,这里我并不打算马上更新Excel歪门邪道,毕竟我可供更新的内容实在是太少了,这也对应了我过去失败的29年,恍恍惚惚出生,恍恍惚惚工作,恍恍惚惚之间步入低谷,从来就没有哪一刻想过要成为成年人,最后不过是有着成年人躯壳的小孩。Excel相关的内容因为我个人经历太浅的原因,不会是长期的更新栏目,预计整个与Excel相关的内容会在10篇以内讲完,如果有勘误会在文末标出修改,之后也许会记录我和编程的缘分,作为一个业余写垃圾代码的人,说实话写太多多少有点不自量力了。

本篇是Excel的背面第一篇,内容很短,因为当初的情形无法复现,因此只能马后炮反过来分析可能产生的原因。

起因是当时还在第一任东家上班时,写了个python脚本帮我做检查工作(虽然这个脚本后来没用了,因为机器性能太差,其他人发我的表又有各种问题,只能放弃),脚本本身并不复杂,只是用pywin32调用一下Excel的COM组件实现在py中用调用vba代码检查表格。然而,这里如果顺风顺水就不会有后面的事情了:

Traceback (most recent call last):
  File "d:/XXXX/XX/10月/XXXXX检查/XXXX.py", line 54, in <module>
    xlApp=DispatchEx('Excel.Application')
  File "C:\Python\lib\site-packages\win32com\client\__init__.py", line 113, in DispatchEx
    dispatch = pythoncom.CoCreateInstanceEx(clsid, None, clsctx, serverInfo, (pythoncom.IID_IDispatch,))[0]
pywintypes.com_error: (-2147024703, 'OLE error 0x800700c1', None, None)

映入眼帘的是一个匪夷所思的错误:pywintypes.com_error: (-2147024703, 'OLE error 0x800700c1', None, None)

这个问题产生的原因我始终没有弄清,只不过在修复好后我简单对比了下Office和WPS的应用程序ID的异同:

组件服务/DCOM配置中记录的Microsoft Excel Application的应用程序ID:
{00020812-0000-0000-C000-000000000046}

一个指向不明的ID,有可能是之前安装Excel2013残留在注册表中的值:
{00020820-0000-0000-C000-000000000046}

WPS表格的程序ID,WPS表格在注册表里对应的缩写为KET:
{45540001-5750-5300-4B49-4E47534F4655}

HKEY_CLASSES_ROOT\Excel.Application\CLSID真正正确的键值:
{00024500-0000-0000-C000-000000000046}

实际上,在注册表中{00020812-0000-0000-C000-000000000046}和{00024500-0000-0000-C000-000000000046}指向注册表项本身的结构几乎是一样的,键值都写明了组件是什么服务,同时也记录了启动程序的命令行。这个问题发生时,我电脑上先后装过Office 2007/2010/2013/2019 和WPS,因此有其他版本的键值残留其实也很正常,但我不能理解的是这个问题是装了WPS以后出现的,而且事后也尝试改了键值和CLSID的指向,只要HKEY_CLASSES_ROOT\Excel.Application\CLSID不指向{00024500-0000-0000-C000-000000000046},pywin32是肯定无法正常调用的,必定会有上面的报错。同时这个问题不能够通过修改注册表中Excel产品ID中LocalServer和LocalServer32键值指向的程序路径了事,因为关键很可能在于CLSID指向不正确而不是Excel程序引用的问题。

至于为什么标题要提到MSO和KET之争,我还想多说两句:
从我第一份工作到现在,我都尝试过在同一台电脑上安装WPS和MS Office,然而每次的结果都不尽人意,因为一旦安装WPS,Office的程序完整性就会被破坏,你也不知道WPS在后台到底在干些什么,从文件关联到VB库,每过一段时间曾经修好改好的设置又会犯病,不是Office打开文件出问题,就是宏用不了,这对于使用是最头疼的。所以现在在单位用WPS在家还是用Office2007,但从心底里说,我大概会选Office,WPS尽管在本地化、功能优化和降低使用门槛上花了大力气,实实在在地让许多人觉得体验友好,但就目前来说还是没能到彻底替代Office的地步,但对于我国特殊的国情而言,WPS应该会大面积铺开然后彻底替代掉Office,尤其是国产化浪潮下,想必也就是眼前的事情了。

 

参考资料:

【0】雨非林-解决WPS导致Excel.Application调用错误问题: 解决WPS导致Excel.Application调用错误问题 - 帷幄网

【1】onereal-关于导出excel,调用Excel.Application报错的解决方法: 关于导出excel,调用Excel.Application报错的解决方法_connecttonewobject("excel.application") 返回-2-CSDN博客

【2】雪落雨伤-关于调用Excel.Application报错的解决方法: 关于调用Excel.Application报错的解决方法-CSDN博客

标签:调用,0000,Office,Excel,Pywin32,WPS,MSO,Application
From: https://www.cnblogs.com/FEAGLESTUDIO/p/18422511

相关文章

  • DsExcel, GcExcel FOR JAVA 7.2.2
    High-SpeedJavaExcelSpreadsheetAPILibraryDocumentSolutionsforExcel(DsExcel,previouslyGcExcel),JavaEdition,allowsyoutoprogrammaticallycreate,edit,import,andexportExcelspreadsheetsinyourJavaapplications.Deploynearlyanywhere.......
  • Python 潮流周刊#70:微软 Excel 中的 Python 正式发布!(摘要)
    本周刊由Python猫出品,精心筛选国内外的250+信息源,为你挑选最值得分享的文章、教程、开源项目、软件工具、播客和视频、热门话题等内容。愿景:帮助所有读者精进Python技术,并增长职业和副业的收入。分享了12篇文章,12个开源项目,2则音视频,全文2000字。以下是本期摘要:......
  • 使用Kettle对Excel进行数据处理
        下载:示例用Excel文件(密码:awov)示例用工程文件    ps:每一个都可以预览哦。......
  • 单片机项目合集列表——Excel合集列表目录查阅(持续更新)
    阿齐Archie《单片机项目合集》专栏项目为方便查找本专栏的项目,特整理Excel合集列表供查阅(可搜索或按系列查找)持续更新链接如下:阿齐单片机项目合集(kdocs.cn)https://www.kdocs.cn/l/cmrxCxJN05YN打开链接如下Exce表所示。电脑可按Ctrl+F搜索相关设计名称,手机点击右上角三......
  • Vue 3 来读取和创建 Excel 文件
    在前端处理Excel文件(读取和创建)通常借助于一些第三方库,如 xlsx。以下是如何使用 xlsx 库在前端从Excel文件中读取数据以及创建并写入数据的详细步骤。1.安装xlsx库并导入npminstallxlsximport*asXLSXfrom'xlsx';2.创建并下载Excel文件直接上代码<but......
  • Excel--DATEDIF函数的用法及参数含义
    DATEDIF函数的用法为:DATEDIF(start_date,end_date,unit),start_date表示的是起始时间,end_date表示的是结束时间。unit表示的是返回的时间代码,是天、月、年等。如下:Datedif函数的参数含义unit参数返回值的意义"y"两个时间段之间的整年数"m"两个时间段之间的整月数"d"两个时......
  • 快速查找EXCEL整个工作表中的合并单元格
    1.按下`Alt+F11`,打开VBA编辑器。2.在左侧的“项目”窗口中,找到你的工作簿,右键点击该工作簿下的任意工作表,选择**插入->模块**。3.在新建的模块窗口中,粘贴以下代码:SubHighlightMergedCells()DimcellAsRangeDimwsAsWorksheetSetws=ActiveSheet......
  • Java Workbook和XSSWorkbook 处理Excel
    JavaWorkbook和XSSWorkbook是ApachePOI库中用于处理Excel文件的两个主要类。ApachePOI是一个流行的JavaAPI,用于读写MicrosoftOffice格式的文档,特别是Excel(.xls和.xlsx)文件。下面将通过一些示例来展示如何使用这两个类处理Excel文件。使用HSSFWorkbook(处理......
  • VBA应用EXCEL公式
    '七个使用公式的例子''1、行标是变量的例子'2、列标用一维数组输入字符串做列标,行标是变量'3、用RC做相对引用'4、RC和变量混合'5、整列使用RC引用,避免使用循环'6、整个区域RC引用——相对引用/循环'7、整个区域RC应用——相对引用/不用循环Sub数例()[a1]="1a":[......
  • easyExcel导出大数据量EXCEL文件,前端实现进度条
    需求:页面点击导出,先按照页面条件去数据库查询,然后将查询到的数据导出。问题:由于查询特别耗时,所以点击之后页面会看上去没有反应,就在点击之后在页面增加了一个进度条,等待后盾查询结束之后,导出时,进度条会显示导出进度,导出结束之后进度条会消失。效果如下:注意点:后端需要在响应......