Python xlwings无法运行COM服务器

2024-10-01 09:35:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我被难倒了。Xlwings报告无法激活COM服务器。我在Windows 10和xlwings 0.17.1(Excel模块版本0.20.5)上使用Excel 365,并使用直接通过Anaconda Navigator包装的python 3.8 conda环境

在Excel中,我将错误追溯到一个shell命令(如下所示),该命令由xlwings模块(xlwings quickstart myproject--standalone)中的Excel XLPyCommand()启动

cmd.exe /K ""C:\Users\Chris\anaconda3\condabin\conda" activate xw_cja && pythonw -B -c "import sys, os;sys.path[0:0]=os.path.normcase(os.path.expandvars(r'D:\Code\Python\AnacondaVenvs\xw_cja;D:\Code\Python\AnacondaVenvs\xw_cja\advena_xw.zip;C:\Users\Chris\anaconda3\envs\xw_cja')).split(';');import xlwings.server; xlwings.server.serve('$(CLSID)')"

我创建了一个简单的.py文件,直接在PyCharm中运行它。我将“($(CLSID)”替换为“({506e67c3-55b5-48c3-a035-eed5deea7d6d}”),这是开发人员在Excel VBA和python代码中硬编码的

import sys, os
os.path.expandvars(r'D:\Code\Python\AnacondaVenvs\xw_cja;D:\Code\Python\AnacondaVenvs\xw_cja\advena_xw.zip;C:\Users\Chris\anaconda3\envs\xw_cja')
sys.path[0:0]=os.path.normcase(os.path.expandvars(r'D:\Code\Python\AnacondaVenvs\xw_cja;D:\Code\Python\AnacondaVenvs\xw_cja\advena_xw.zip;C:\Users\Chris\anaconda3\envs\xw_cja')).split(';')
import xlwings.server
xlwings.server.serve('{506e67c3-55b5-48c3-a035-eed5deea7d6d}')

上面的代码在一个独立的.py文件(在PyCharm中)中运行良好

仅供参考:我使用MKLINK-j(在批处理文件中)将C:\Users\Chris\anaconda3\envs链接到D:\Code\Python\AnacondaVenvs,这使它们成为同义词。这是不相关的,但是没有这些知识,您可能会错误地观察到上面代码中的路径差异。(顺便说一句,我这样做是为了使我的D驱动器上的数据显示在C上,以管理C上的空间)

外壳打开,显示命令在正确的conda环境xw_cja下运行

Excel沙漏显示至少一分钟。然后,我得到了这个错误:“无法激活Python COM服务器,hr=-2147221164 1000”

我打开了一个命令提示符并运行了以下命令,没有出现错误。 C:\Users\Chris>;“C:\Users\Chris\anaconda3\condabin\conda”激活xw\U cja

(xw_cja) C:\Users\Chris>pythonw -B -c "import sys, os;sys.path[0:0]=os.path.normcase(os.path.expandvars(r'D:\Code\Python\AnacondaVenvs\xw_cja;D:\Code\Python\AnacondaVenvs\xw_cja\advena_xw.zip;C:\Users\Chris\anaconda3\envs\xw_cja\')).split(';')

(xw_cja) C:\Users\Chris>pythonw -B -c "import xlwings.server"

(xw_cja) C:\Users\Chris>pythonw -B -c "import xlwings.server.serve('$(CLSID)')"

(xw_cja) C:\Users\Chris>pythonw -B -c "import sys, os;sys.path[0:0]=os.path.normcase(os.path.expandvars(r'D:\Code\Python\AnacondaVenvs\xw_cja;D:\Code\Python\AnacondaVenvs\xw_cja\advena_xw.zip;C:\Users\Chris\anaconda3\envs\xw_cja\')).split(';');import xlwings.server; xlwings.server.serve('$(CLSID)')"

(xw_cja) C:\Users\Chris>

我打开了一个新的命令提示符/shell,并将完整命令作为一行进行了尝试,没有报告任何错误

C:\Users\Chris>"C:\Users\Chris\anaconda3\condabin\conda" activate xw_cja && pythonw -B -c "import sys, os;sys.path[0:0]=os.path.normcase(os.path.expandvars(r'D:\Code\Python\AnacondaVenvs\xw_cja;D:\Code\Python\AnacondaVenvs\xw_cja\advena_xw.zip;C:\Users\Chris\anaconda3\envs\xw_cja\')).split(';');import xlwings.server; xlwings.server.serve()

(xw_cja) C:\Users\Chris>

这是我在“xlwings.conf”工作表上设置的配置数据(是的,我删除了前导下划线)

解释器_Win pythonw
Python路径C:\Users\Chris\anaconda3\envs\xw\u cja\
康达路径C:\Users\Chris\anaconda3
康达环境酒店 UDF模块advena_xw;udf
调试UDF错误
日志文件
使用UDF服务器错误
显示控制台错误


Tags: pathimportserveros错误syscodexlwings
1条回答
网友
1楼 · 发布于 2024-10-01 09:35:57

所以,这很有趣。我使用的是康达环境。即便如此,将anaconda路径变量添加到我的系统环境变量(Windows 10)中解决了这个问题。我从xlwings文档中了解到,这是不需要的。但它解决了我的问题。我确实验证了,对于大多数从Excel触发的python脚本,xlwings使用的是conda环境。但是,在conda环境和主要python安装中,我必须拥有相同版本的xlwings dll文件。在过去使用venv(本机python虚拟环境库)时,我没有遇到过这个问题

相关问题 更多 >