希望你能帮助我,我问自己的第一个问题,但我总是对我在这里找到的专业答案印象深刻!
我正在使用 xlwings 从 .xls 文件中读取和写入数据。我不是一个经验丰富的程序员,我会犯错误。有时,这意味着重新启动进程、Python 等等。
时不时地,我会AttributeError
在调用时收到以下信息Workbook()
。真正的问题不是我不知道发生了什么(我尝试阅读错误诊断所引用的模块,但它们是在超出我技能的 Python 级别上编写的),而是重新启动甚至重新启动(!)我的笔记本电脑(总是)不能解决问题。
我希望我能提供一些关于正在发生的事情的线索,但这似乎是一个随机发生的问题,现在,三次重启和几次重启都没有解决它。谷歌也无能为力。到目前为止,我一定已经运行了我的程序一百次,而且这并不总是一个问题!错误消息,只需调用Workbook()
:
wb = Workbook()
Traceback (most recent call last):
File "<ipython-input-22-4a3c36eb9bf9>", line 1, in <module>
wb = Workbook()
File "C:\Program Files\Anaconda\lib\site-packages\xlwings\main.py", line 141, in __init__
self.xl_app, self.xl_workbook = xlplatform.new_workbook()
File "C:\Program Files\Anaconda\lib\site-packages\xlwings\_xlwindows.py", line 104, in new_workbook
xl_app = _get_latest_app()
File "C:\Program Files\Anaconda\lib\site-packages\xlwings\_xlwindows.py", line 88, in _get_latest_app
return xl_workbook_current.Application
File "C:\Program Files\Anaconda\lib\site-packages\win32com\client\dynamic.py", line 522, in __getattr__
raise AttributeError("%s.%s" % (self._username_, attr))
AttributeError: Open.Application
作为后续,来自“dyamic.py”的一段代码引发了错误:
[...]
# If we are still here, and have a retEntry, get the OLE item
if not retEntry is None:
invoke_type = _GetDescInvokeType(retEntry, pythoncom.INVOKE_PROPERTYGET)
debug_attr_print("Getting property Id 0x%x from OLE object" % retEntry.dispid)
try:
ret = self._oleobj_.Invoke(retEntry.dispid,0,invoke_type,1)
except pythoncom.com_error, details:
if details.hresult in ERRORS_BAD_CONTEXT:
# May be a method.
self._olerepr_.mapFuncs[attr] = retEntry
return self._make_method_(attr)
raise
debug_attr_print("OLE returned ", ret)
return self._get_good_object_(ret)
# no where else to look.
raise AttributeError("%s.%s" % (self._username_, attr))
正如我之前提到的,最后一点对我来说太多了:P
由于一些随机错误,我关闭了一些随机窗口后,我猜想一些挥之不去的 Excel.exe(或类似)进程干扰了脚本,但我在任务管理器中找不到。此外,这是重启应该解决的问题,对吧?!我还升级到 xlwings .34(截至目前的最新版本)。
Windows 8.1 64 位,Python 2.7(Anaconda 发行版,Spyder IDE),Excel 2013。
当然,非常感谢任何帮助!
非常感谢,亲切的问候,
戈登。
编辑:
按照评论中给出的建议,我现在可以报告,即使有时wb = Workbook()
失败,from win32com.client import dynamic
然后是dynamic.Dispatch('Excel.Application')
返回<COMObject Excel.Application>
。
希望能帮助到你!