2012-04-03 17 views
8

の値を7に変更すると、excelRTDserver.pyがExcel 2010(32ビット)で実行されています。私はアドインのリストにサーバーが表示されていて、セルに=RTD("Python.RTD.TimeServer","","seconds","5")と入力すると現在の時刻が取得されます。しかしそれは更新されません。 「5」を別の番号に変更すると、更新がありますが、最初の変更後に再び変更されることはありません。PythonのExcel RTDサーバーでデータが更新されない

どうすれば更新できますか?私は同様の問題を持つ他の誰かを見つけたhere、しかし解決策はありません。

UPDATE:私はもう少しです。PyIDispatchコールバックオブジェクトをIRTDUpdateEventコールバックオブジェクトにキャストするときに、ServerStart内で例外が発生します。 this methodを使用してエラーメッセージをキャプチャすると、「そのファイルが既に存在するときにファイルを作成できません。」というメッセージが表示されます。私が提案したhereに従ってwin32com.client.CastTo(CallbackObject,'IRTDUpdateEvent')を使用した場合、「このCOMオブジェクトはmakepyプロセスを自動化できません。このオブジェクトに対して手動でmakepyを実行してください」が、すでにMicrosoft Excel 12.0 Object Library(1.6)用のmakepyを実行しています。

ご協力いただければ幸いです。

答えて

3

私はあなたが運の外かもしれないと思います。

According to the author of excelRTDServer.py in a recent python-win32 thread

これはに対応しているというメッセージがあなたの正確な問題について説明し、それが最近なので、多分あなたは既に直接この情報を得たが、ケースには、あなたがしませんでした...

私はIRTDUpdateEventと物事が エクセルの最近のバージョンで変更されたことを恐れる(エクセル2007年から?私は...それはもうそれほど「最近」ではないだと思います)。

インターフェイスの変更のニュースの周り狩り、私はJavaのフォーラムでこの スレッドに出くわしながら:どうやら

」:私を心配部分がこのコメントである

http://www.nevaobject.com/phpbb3/viewtopic.php?t=516

Excel 12(Excel 2007)で がデュアルIRTDUpdateEventインターフェイスを実装しているRTDコールバックオブジェクトは、IDispatch経由で呼び出されたときに例外(汎用COM 例外0x80020009)をスローします。 vV-table を使用してUpdateNotifyへの呼び出しを成功させます。私は本当に ...これまでのところ私は、MSDNの情報に対して、これを確認することができていない「。それ はエクセル12または機能のバグであるかどうかを

を知らないしかし、これは本当であるならば、それが見られる問題を説明する。ウェブ、およびpywin32の+の多くの古い 例はIDispatchを、 としてこのインタフェースを扱い、それに応じてラップmakepy。

私たちはそれとしてpywin32でこの問題を解決することができないと思うん私の は、IDispatchサポートに依存していることを理解しています。 comtypes(http://starship.python.net/crew/theller)を参照する必要があります。/comtypes /)を使用して、 (新規?)IRTDUpdateEventオブジェクトをラップするか、おそらくCの拡張機能を使用します。 :(pythoncomのために、私はgithubの上に新しいプロジェクトを作成してこの問題を回避するには

+0

ええ、そこにも質問を投稿しました。私は運が尽きているように見える。 – MatlabSorter

1

のPython:

私が手に "このCOMオブジェクトはmakepyプロセスを自動化することはできません - このオブジェクトのために手動でmakepy実行してください" が、私はすでにのMicrosoft Excel 12.0オブジェクトライブラリ(1.6)のためmakepyを実行しました。しばらくは、あなたの質問を読んだ後、仕事で

昨日は、私はPythonとないのjava :))...まあ、私は今だと思う唯一のことは、それはあなたがオフィス2010

ため PIAを実行する必要があるようだです忘れてしまいました

後で編集:もし私があなたに言ったことの後に鋼鉄に問題があるなら、この問題は珍しいので、コメントしてください。

JAVA:V-テーブルを生成するオプションが含まれていませんので、

これが起こります。

あなたはServerStartの方法ともIRTDServerインタフェースとIRTDServer_Impl classを変更する必要があります。ので、CallbackObjectCOMIUnknownです。次に、IBuilderを実行して、IRTDServer_Skelクラスを生成する必要があります。

今、あなたがv-テーブルを要求するIRTDUpdateEventのための新しいJavaラッパーを生成することができます。

enter image description here

+0

お返事ありがとうございます。しかし、私はPythonのソリューションを探しています。残念ながら、私はJavaに堪能ではありません。 – MatlabSorter

+0

答えを更新します。 –

+0

downvoteは私ではなかった、私は助けを求めている、あなたはそれを与えている。残念ながら、私はPIAをインストールしましたが、それは役に立ちませんでした。 – MatlabSorter

3

は種類をエクセル:

https://github.com/pyxll/exceltypes

これは新しいタイプPyIRTDUpdateEventを使用していますexcelRTDServer.pyを少し変更したバージョンを含んでいますwin32com makepyラッパーの代わりに、今Excel 2010で動作します('EXCELTYPES_MODIFICATION'exceltypes/demos/excelRTDServer.pyを参照してください)。

プロジェクトあなたは、Visual Studioにインストールが必要になります(これはgccでビルドされません)、あなたは次のようにプロジェクトに含まsetup.pyを使用して、それを構築することができます:

python setup.py install 

をVisual Studioを使用するように強制する必要がある場合gccの代わりに"--compiler=msvc"オプションを使用してください(例:anacondaを使用している場合)。 あなたがsetup.pyに次の行を追加します代わりに、デフォルトの2010のVisual Studio 2012を使用する場合:

from distutils import msvc9compiler 
msvc9compiler.VERSION = 11 
0

uはfor'ループ」のようなものに入れたときにエラーメッセージが時々上げていることを、ここにありますあなたのループで 'sleep()'を使ってください。

関連する問題