Python 使用Win32 COM访问Excel文件时出现问题
各位!Python 使用Win32 COM访问Excel文件时出现问题,python,excel,win32com,Python,Excel,Win32com,各位!我一直在使用Python中的win32com.client模块访问包含VBA宏的Excel文件的单元格codexl=win32com.client.gencache.EnsureDispatch(“Excel.Application”)中的一条语句抛出了一个错误:AttributeError:module'win32com.gen_py.00020813-0000-0000-C000-0000000000 46x0x1x6'没有属性'MinorVersion'是否有人遇到过类似情况,如果有
我一直在使用Python中的win32com.client模块访问包含VBA宏的Excel文件的单元格
code
xl=win32com.client.gencache.EnsureDispatch(“Excel.Application”)
中的一条语句抛出了一个错误:AttributeError:module'win32com.gen_py.00020813-0000-0000-C000-0000000000 46x0x1x6'没有属性'MinorVersion'
是否有人遇到过类似情况,如果有,有什么可能的补救办法?(我已经在GitHub上查看了win32com的源代码,但还没有从中获得多少意义。)如果我想确保python启动一个新的excel实例(例如访问xlsm文件中的宏),我使用 这样我就可以关闭应用程序,而不会损坏已经打开的实例 否则,我可以简单地使用
xlApp = win32com.client.Dispatch("Excel.Application")
这对您有效吗?此属性错误的主要原因是您的COM服务器已从后期绑定(动态)转换为早期绑定(静态)
- 在后期绑定中,每当调用方法时,都会查询对象以查找该方法,如果成功,则可以进行调用李>
- 在早期绑定中,对象模型的信息是根据对象调用提供的类型信息预先确定的。早期绑定使用MakePy。而且,早期绑定区分大小写李>
"win32com.client.dynamic.Dispatch()" instead of "win32com.client.Dispatch()"
"excel.Visible()" instead of "excel.VISIBLE()" or "excel.visible()"
"win32com.client.dynamic.Dispatch()" instead of "win32com.client.Dispatch()"
"excel.Visible()" instead of "excel.VISIBLE()" or "excel.visible()"
"win32com.client.dynamic.Dispatch()" instead of "win32com.client.gencache.EnsureDispatch"
因为win32com.client.gencache.requiredispatch强制执行MakePy进程 虽然我相信前面的答案,但我更了解Redispatch,如果您来这里是因为您有此问题,但无法修改代码或不想修改代码,我可以通过重命名文件夹来解决此问题。运行这些行会引发相同的错误:
from win32com.client.gencache import EnsureDispatch
import sys
xl = EnsureDispatch("Excel.Application") # Error here
print(sys.modules[xl.__module__].__file__)
现在,不幸的是,如果出现错误,很难知道文件在哪里。对我来说,就是这个文件夹:C:\Users\\AppData\Local\Temp\gen\u py\
。在该文件夹名称后添加下划线(或删除下划线)将导致在重新运行代码时重新创建该文件夹
帽子提示
pyxll链接还有另一段代码,可能需要调用另一个文件夹位置。我没有使用它,所以我不会在这里发布代码。上面的修复对我来说很有效,但只是为了以防万一,你可以进一步深入兔子洞。重命名
GenPy
文件夹应该可以
它位于:C:\Users\\u insert\u username\uu\AppData\Local\Temp\gen\u py
重命名它将创建一个新的
Gen_py
文件夹,并允许您正确发送Excel。如前所述删除文件夹对我不起作用。
我通过使用conda安装新版本的pywin32解决了这个问题。
conda install-c anaconda pywin32解决方案是找到gen_py文件夹(c:\Users\\AppData\Local\Temp\gen_py)并删除其内容。当我将COM与其他程序一起使用时,它适用于我。您确定您有最新版本吗?请尝试
pip安装-U pypiwin32
。这是否回答了您的问题?嘿,Joel,你应该把所有的代码语句转换成编码格式。作为参考,你可以看一看,这是唯一一件对我也有效的事情。这不是一种可靠的生产方式,因为我的最终用户无法在他们的机器上解决这样的问题。。。真可惜。