1

pywin32-216.win32-py2.7 がインストールされた Python 2.7.2 では、win32com モジュールを使用して Windows で Excel を次のように処理します。

>>> import win32com.client
>>> xlsApp = win32com.client.Dispatch('Excel.Application')
>>> xlsApp.Workbooks.Open(r'D:/test.xls')

エラーが発生します:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<COMObject <unknown>>", line 8, in Open
pywintypes.com_error: (-2147352567, '\xb7\xa2\xc9\xfa\xd2\xe2\xcd\xe2\xa1\xa3',
(0, u'Microsoft Office Excel', u'\u540d\u4e3a\u201ctest.xls\u201d\u7684\u6587\u6
863\u5df2\u7ecf\u6253\u5f00\u3002\u4e0d\u80fd\u540c\u65f6\u6253\u5f00\u540c\u540
d\u6587\u4ef6\uff0c\u65e0\u8bba\u5b83\u4eec\u662f\u5426\u5728\u540c\u4e00\u6587\
u4ef6\u5939\u4e2d\u3002\n\u8981\u6253\u5f00\u7b2c\u4e8c\u4efd\u6587\u6863\uff0c\
u8bf7\u5173\u95ed\u5df2\u7ecf\u6253\u5f00\u7684\u6587\u6863\uff0c\u6216\u8005\u9
1cd\u65b0\u547d\u540d\u5176\u4e2d\u7684\u4e00\u4e2a\u6587\u6863\u3002', None, 0,
 -2146827284), None)

情報は読めませんが、何が問題なのかわかりません!

インターネットで検索した後、http://www.python-forum.org/pythonforum/viewtopic.php?f=15&t=17665で役立つものを見つけました。

pywintypes.com_error: (-2147352567, '例外が発生しました.', (0, u'Microsoft Office Excel', u"'test .xls' が見つかりませんでした。ファイル名のスペルを確認し、ファイルの場所を確認してください\n\n[ファイル] メニューの最近使用したファイルのリストからファイルを開こうとしている場合は、ファイルが名前変更、移動、または削除されていないことを確認してください。", u'C:\Program Files\Microsoft Office\OFFICE11\1033\xlmain11.chm', 0, -2146827284), なし)

同じ問題だと思うので、最初に Excel ファイル 'D:/test.xls' を作成すると、すべて問題なく動作します。

>>> xlsApp.Workbooks.Open(r'D:/test.xls')
<COMObject Open>

読めるエラーのヒントがあれば、難しいことはせずにすぐに問題を解決できます。

win32com.client から得られるエラーがなぜそのようなものなのだろうか? 情報を読みやすくするためにできることはありますか?

私はあなたの助けに感謝します!

4

2 に答える 2

3

極東アジアのどこか(おそらく中国?)の国際化設定を使用していて、コマンドプロンプトでPythonを使用しているため、そのようになったと思います。問題が Python にあるのか、コマンド プロンプトにあるのか、それともその 2 つの組み合わせにあるのかはわかりませんが、いずれにせよ、これら 2 つの組み合わせは、ラテン語以外の国際化設定では特にうまく機能しません。

Unicode 文字を適切にサポートしているように見えるので、代わりにIDLEを使用することをお勧めします。IDLE で最後の文字列を表示すると、次のようになります。このテキストは私には何の意味もありませんが、あなたにとっては意味があるかもしれません:

アイドル 2.6.4      
>>> z = u'\u540d\u4e3a\u201ctest.xls\u201d\u7684\u6587\u6863\u5df2\u7ecf\u6253\u5f00\u3002\u4e0d\u80fd\u540c\u65f6\u6253\u5f00\u540d\u54 u6587\u4ef6\uff0c\u65e0\u8bba\u5b83\u4eec\u662f\u5426\u5728\u540c\u4e00\u6587\u4ef6\u5939\u4e2d\u3002\n\u8981\u6253\u5f00\u7b2c\u4efd7\u48d7\u48d7 u6863\uff0c\u8bf7\u5173\u95ed\u5df2\u7ecf\u6253\u5f00\u7684\u6587\u6863\uff0c\u6216\u8005\u91cd\u65b0\u547d\u540d\u5176\u4e2d\u76284\u4\e8\u4\e8\u4\e8 u6863\u3002'
>>> z を印刷
「test.xls」という名前のファイルが開かれました。同名のファイルを同時に開くことはできません。
2 番目の文書を開きたい、以前に開いた文書を停止する、またはその中の 1 つの文書に名前を付け直す。
>>>

ただし、IDLE を使用している場合でも、例外が発生した場合でも、上記のようにテキストが表示される可能性があります。printこれが発生した場合、最後に発生した例外からデータを取得し、その中から関連する文字列を取得する必要があります。

インタープリターで最後に発生した例外を取得するには、 を使用できますsys.last_value。別の例外メッセージの例を次に示します。

>>> システムをインポート
>>> f: pass として open('nonexistent.txt') を使用
...
トレースバック (最新の呼び出しが最後):
  ファイル ""、1 行目、
    open('nonexistent.txt') を f: pass として使用
IOError: [Errno 2] そのようなファイルまたはディレクトリはありません: 'nonexistent.txt'
>>> sys.last_value
IOError(2, 'そのようなファイルまたはディレクトリはありません')
>>> 印刷 (sys.last_value[1])
そのようなファイル、又はディレクトリはありません
>>>
于 2011-09-25T11:38:16.637 に答える
0

同様のエラーが発生しました。私の特定のケースでは、次のように作成された一時ファイルを使用しようとしていました。

fileprefix = 'Report'
filesuffix = '.xlsx'
filename = tempfile.gettempdir() + '\\' + fileprefix + filesuffix
xfile = tempfile.NamedTemporaryFile(suffix = filesuffix, prefix = fileprefix)

名前付きの一時ファイルがまだ開いている間に、その名前を使用してファイルを 2 度目に開くことができるかどうかは、プラットフォームによって異なります (Unix では使用できますが、Windows NT 以降では使用できません)。

そのため、Windows OS でそのファイルを再利用できないようです。そして、それがエラーが発生する理由です。

あなたの場合、最初にファイルがどのように作成されているかを確認したい場合があります。

于 2013-01-01T21:06:02.793 に答える