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

news/2024/9/22 17:17:17/文章来源:https://www.cnblogs.com/FEAGLESTUDIO/p/18422511

在上一篇博文中我提到了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 DispatchExdispatch = 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博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/801575.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CSP2024-24

2A 题意:给定长度为 \(n\) 的非负整数数组 \(a\),求最小的 \(r−l+1\) 满足 \(l≤r,\sum_{i = l}^ra_i\) 是合数。 考虑全是正数的情况,答案一定 \(\le 4\),考虑一下每个数的奇偶性即可。 那么就把所有正数及其位置存下来,使得 \(b_i = a_{p_i}\),暴力检查 \(b\) 中长度为…

放开那代码让我来!——Cursor帮你写代码的奇妙之旅

让我们开门见山:编程很酷,但也很折磨人。那些长时间盯着屏幕,debug无休止的日子,只有程序员懂得它的酸爽。而就在这个编程焦虑的世界中,Cursor横空出世,带着一系列魔法功能,如同你手中的一根智能魔杖,让写代码变得像煮速冻面一样简单。 Cursor,一款基于AI的编程助手,…

Mathtype公式相关:在mathtype中添加任意维数矩阵的方法以及矩阵中省略号的问题;输入空格;输入花体字母;输入空心字母;输入空心数字

一、在mathtype中添加任意维数矩阵的方法以及矩阵中省略号的问题 使用mathtype创建任意维数的矩阵: 打开mathtype后可点击矩阵工具栏,再点击右下角的图形,具体情况如下图所示。点击之后会弹出一个对话框如下图所示,可在行列处输入自己想要的行数和列数。使用此方法创建的矩…

GIS转码的秋招历程与踩坑经历

本文介绍地理信息科学(GIS)专业的2024届应届生,在研三上学期期间,寻找后端研发、软件开发等IT方向工作的非科班转码秋招情况~本文介绍地理信息科学(GIS)专业的2024届应届生,在研三上学期期间,寻找后端研发、软件开发等IT方向工作的非科班转码秋招情况。首先,这篇文章一…

树状数组浅谈

什么是树状数组 树状数组是一种码量小,常数小,支持单点修改和区间查询的数据结构。 树状数组维护的信息和运算需要满足结合律并且可差分 注意gcd和max操作虽然满足结合律,但不可差分,因此不能使用树状数组维护 其实,树状数组能做的,线段树都能做,线段树能做的,树状数组…

Filebeat

Filebeat 简介 Filebeat用于转发和集中日志数据的轻量级传送程序。作为服务器上的代理安装,Filebeat监视指定的位置文件或位置,收集日志事件,并将他们转发到Elasticsearch 或Logstash进行索引。 架构图安装Filebeat 下载并安装 wget https://artifacts.elastic.co/download…

Tarjan算法及其应用 总结+详细讲解+详细代码注释

\(\text{Tarjan}\) 1.引入概念 1.强连通分量 1.定义 在有向图 \(G\) 中,强连通分量就是满足以下条件的 \(G\) 的子图:从任意一点出发,都有到达另一个点的路径。 不存在一个或者几个点,使得这个子图加入这些点后,这个子图还满足上一个性质。为什么要限定”在有向图中“而不…

三级数据库技术笔记

数据库应用系统开发方法 数据库应用系统生命周期 软件工程与软件开发方法 瀑布模型 快速原型模型 螺旋模型 DBAS生命周期 DBAS生命周期:项目规划、需求分析、系统设计、实现与部署、运行与维护 规划与分析 可行性分析:经济可行性、技术可行性、操作可行性、开发方案选择 需求…

洛谷P5683 [CSP-J2019 江西] 道路拆除

立下flag:今天一定AC这道题! 题目意思: 思路: 然而并没有分。。 输出-1,祈求CCF的施舍( 30% 的数据,有 \(s_1 = s_2\) 求 1 号点到 \(s_1\) 最短路,再计算不需要的路径。 SPFA,启动! #include<bits/stdc++.h>using namespace std;const int maxn=3010; const i…

golang 项目引入私有仓库包

场景: 当你多个项目,都需要使用一个或者多个方法,那么可以将公共方法,抽成一个包,进行管理(类似Log模块等)。这时候可以将你的包上传到私有的仓库,其他项目引入该包即可。下面来介绍下,如何引用私有仓库的包。 1. 创建一个新的 Git 标签 假设你已经在你的私有 GitLab …

设计模式之——装饰者模式

前言: 装饰者模式是结构性设计模式之一,其在不必改变类文件及不适用继承的情况下,动态的扩展一个对象的功能。它通过创建一个包装对象(即装饰)来包裹真实的对象。 一.定义 动态的给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更加灵活。 装饰者模式的…

解决vsc中文乱码

关于vs code使用code runner运行python代码出现中文乱码的解决办法_code runner 运行乱码-CSDN博客 Code Runner插件设置 "set PYTHONIOENCODING=utf8 && python -u"