2

win32com私はかなり長い間、問題なくAutoCADにアクセスするために走っています。ユーティリティを適用すると、インタラクティブプロンプトでよりユーザーフレンドリーなエクスペリエンスが作成されることを知ったので、makepyユーティリティを実行して「AutoCAD2006タイプライブラリ」を追加しました。現在、アクセスに使用していたいくつかの一般的な属性は使用できなくなりました。コードを考えてみましょう:

acad = win32com.client("AutoCAD.Application")
doc = acad.Documents.Open('mydoc.dwg')
ms = doc.ModelSpace
count = ms.Count #counts all entities in dwg

for i in range(count):
    item = ms.Item(i)
    if 'block' in item.ObjectName.lower():
        print item.Name
Traceback (most recent call last):
File "<interactive input>", line 1, in <module>
File "C:\Python27\lib\site-packages\win32com\client\__init__.py", line 462, in 
  __getattr__ raise AttributeError("'%s' object has no attribute '%s'" 
  (repr(self),attr))
AttributeError: '<win32com.gen_py.AutoCAD 2006 Type Library.IAcadEntity instance 
  at 0x34894552>' object has no attribute 'Name'

Nameを実行するまで、常にブロックのアクセス可能な属性でしたmakepy。Python for Windowsを再インストールしてリセットされるかどうかを確認しようとしましたが、機能しませんでした。

makepyは、実装時に削除する必要のある別のファイルを作成しますか?

Name私のスクリプトの多くは属性に依存しています。あなたが提供できる提案や助けをいただければ幸いです。

4

2 に答える 2

1

win32comDELMIA にアクセスするために実行すると、同様の問題が発生します。delmia にはたくさんの com が.tlbファイルとして含まれていることがわかりました。入力すると:

from win32com.client.gencache import EnsureDispatch
EnsureDispatch('DELMIA.Application')

win32com\gen_pyPython は、Word や Excel の例と同じように、ディレクトリ内にいくつかのものを自動的に生成します。ただし、違いは、生成されたものは.tlb、delmia の 1 つのファイルのみからのものであるということです。`.tlb 内の変数にアクセスすれば問題ありません:

docs = delmia.Documents

other の変数にアクセスする.tlbと、同様のエラーが発生します。

pdoc = docs.Add('Process')

Python は次のように述べています。

... オブジェクトには属性がありません ...

そのため、ディレクトリ内のすべてのファイルを削除しますが、win32com\gen_pyディレクトリは保持しgen_pyます。これで問題ありません。

于 2015-03-26T06:32:00.187 に答える