2

Python のpyrtdモジュールを使用して、RTD を介して Excel で取得できる情報を取得しようとしています。

ただし、サンプルの python スクリプトを実行しようとすると、次のエラーが発生します。

pywintypes.com_error:( -2147221164, 'Class not registered', None, None)

他のいくつかの RTD 関数を試してみましたが、時々 (Dllname.function_nameのパラメーターとして使用している場合RTDClient()) 次のようになります。

pywintypes.com_error:( -2147221005, 'Invalid class string', None, None)

これらの RTD 関数はすべて、Excel 2010 で適切に機能します。

Python の解決策はまだ見つかっていませんが、C# で利用できるいくつかのヒントを確認しました。

基本的な考え方は次のとおりです。

  1. 登録テーブルから rtd サーバーのクラス タイプを取得しますProgID(たとえば、regsvr32を使用して dll を登録している場合は、 でRTDTime.RTD見つけることができます)。HKEY_LOCAL_MACHINE\SOFTWARE\Classes\RTDTime.RTD

    C# では、関数はType.GetTypeFromProgID(). Python module にも同じ機能があると思いますwin32com

  2. IRtdServerサーバー クラスを( )にキャストしますMicrosoft.Office.Interop.Excel.IRtdServer

  3. 次にIRtdServer.ConnectData(topicID, topics, newData)、データを取得するために使用できます。

    • topicID任意のランダムなようintです。
    • topicsは Excel で使用したパラメーターで、配列です。
    • newDataキャッシュされたデータではなく、新しいデータを要求する場合は、boolに設定します。True
  4. ただし、データを自動的に更新したい場合は、コールバック イベントが必要になると思います。

リンクされたブログ投稿によると、イベント クラスは からも取得できますprogIDしかし、reg テーブルには何も見つかりませんでした

C# では、IRTDUpdateEvent. しかし、Pythonでそれを処理する方法がわかりません。

誰かがこれらのエラーを回避するのを手伝ってくれますか?

4

2 に答える 2

2

解決しました。32 ビット ActivePython をインストールして使用する

http://python.6.x6.nabble.com/Problem-using-win32com-client-Dispatch-on-Win7-64bit-td1957248.html

64ビットのpythonを使用していて、32ビットのcomオブジェクトを取得しようとしている可能性があります

于 2014-08-08T06:07:17.207 に答える