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# で利用できるいくつかのヒントを確認しました。
- Excel リアルタイム データ (RTD) サーバー用の AC# クライアント
- C# の Excel RTD クライアント
- http://bbs.csdn.net/topics/320252117
- Excel RTD サーバー: C# の複数のトピック
基本的な考え方は次のとおりです。
登録テーブルから rtd サーバーのクラス タイプを取得します
ProgID
(たとえば、regsvr32を使用して dll を登録している場合は、 でRTDTime.RTD
見つけることができます)。HKEY_LOCAL_MACHINE\SOFTWARE\Classes\RTDTime.RTD
C# では、関数は
Type.GetTypeFromProgID()
. Python module にも同じ機能があると思いますwin32com
。IRtdServer
サーバー クラスを( )にキャストしますMicrosoft.Office.Interop.Excel.IRtdServer
。次に
IRtdServer.ConnectData(topicID, topics, newData)
、データを取得するために使用できます。topicID
任意のランダムなようint
です。topics
は Excel で使用したパラメーターで、配列です。newData
キャッシュされたデータではなく、新しいデータを要求する場合は、bool
に設定します。True
ただし、データを自動的に更新したい場合は、コールバック イベントが必要になると思います。
リンクされたブログ投稿によると、イベント クラスは からも取得できますprogID
。しかし、reg テーブルには何も見つかりませんでした。
C# では、IRTDUpdateEvent
. しかし、Pythonでそれを処理する方法がわかりません。
誰かがこれらのエラーを回避するのを手伝ってくれますか?