あなたが私を助けてくれることを願っています, 私は自分自身に最初の質問をします.
xlwings を使用して、.xls ファイルからデータを読み書きしています。私はベテランのプログラマーではなく、間違いを犯します。ときどき、これはプロセス、Python などを再起動することを意味します。
AttributeError
時々、を呼び出すと次のようになりますWorkbook()
。本当の問題は、何が起こっているのか手がかりがないことではありません (エラー診断が参照するモジュールを読んでみましたが、それらは私のスキルを超えたレベルの Python で書かれています)。 (!) 私のラップトップは (常に) 問題を解決しません。
何が起こっているのか手がかりを提供できればと思いますが、ランダムに発生する問題のようで、現在、3回の再起動と数回の再起動では修正されませんでした. グーグルも助けにはなりません。これまでにプログラムを 100 回実行したに違いありませんが、常に問題になるわけではありません。単に呼び出したときのエラーメッセージ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()
コメントで与えられたアドバイスに従って、失敗した場合でも、 return が続くfrom win32com.client import dynamic
ことを報告できるようになりました。dynamic.Dispatch('Excel.Application')
<COMObject Excel.Application>
それが役に立てば幸い!