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.RTDC# では、関数は
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でそれを処理する方法がわかりません。
誰かがこれらのエラーを回避するのを手伝ってくれますか?