2012-04-03 111 views
8

我通過將EXCEL_TLB_MINOR的值更改爲7來啓動並運行Excel 2010(32位)中的excelRTDserver.py。我可以在加載項列表中看到服務器,如果我將=RTD("Python.RTD.TimeServer","","seconds","5")輸入到單元格中,我可以看到當前時間。但它永遠不會更新。如果我將「5」更改爲另一個數字,我會得到一個更新,但在初始更改後它不會再更改。Python中的Excel RTD服務器沒有更新數據

我該如何得到它來更新?我發現其他人有類似的問題here,但沒有解決方案。

更新:我還有一點 - 在將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與最近版本的Excel 的改變(因爲Excel 2007中?我想這是不那麼「近期」了...)。

雖然狩獵周圍的接口變化的消息,我碰到這個 線程進來一個java論壇:

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

令我擔心的部分是這樣的評論:

「顯然,在Excel 12(Excel 2007)中,當通過IDispatch調用時, 實現雙重IRTDUpdateEvent接口的RTD回調對象拋出異常(通用COM 異常0x80020009)。如果您使用v表 將呼叫綁定到UpdateNotify成功。我真的不知道它是否 是在Excel 12或功能中的錯誤。」

到目前爲止,我一直沒能證實這一點對MSDN信息... 但是,如果這是真的,它確實說明被視爲問題。許多老 例子在網絡上,並pywin32 + makepy把這個接口作爲IDispatch接口, 並相應地把它包起來。

我不認爲我們可以用pywin32,因爲它解決這個問題我的 的理解是它依賴於IDispatch的支持。可能需要看看 comtypes(http://starship.python.net/crew/theller/comtypes /)包裝 (新?)IRTDUpdateEvent對象,或者可能是C擴展。 :(

+0

是的,我也在那裏發佈了這個問題。它看起來像我運氣不好。 – MatlabSorter 2012-04-11 23:39:08

1

的Python:

我得到 「這COM對象不能自動化makepy過程 - 請makepy手動運行該對象」,但我已經爲Microsoft Excel 12.0對象庫運行makepy(1.6) 。

昨天在工作一邊讀你的問題後,我忘了是Python和不是Java :))..好吧,我想現在唯一的事情是,看來你需要爲2010年

辦公室運行 PIA

稍後編輯:如果您的鋼材在我告訴您之後有問題,請評論並且不要低估,因爲這個問題不常見。

JAVA:

這發生,因爲缺少生成V-表的選項。

您需要修改ServerStart方法,也IRTDServer接口和IRTDServer_Impl class,所以CallbackObjectCOMIUnknown。然後,您需要運行IBuilder來生成IRTDServer_Skel類。現在

您可以生成IRTDUpdateEvent一個新的Java包裝要求v表:

enter image description here

+0

感謝您的迴應,非常感謝。不過,我正在尋找一個Python解決方案。可悲的是我不熟練Java。 – MatlabSorter 2012-04-11 21:33:48

+0

我更新了我的答案。 – 2012-04-12 20:46:41

+0

downvote不是我,我是在尋求幫助,而你在給它。不幸的是,我安裝了PIA,但它沒有幫助。 – MatlabSorter 2012-04-12 21:56:14

3

要解決這個問題,我已經創建在github上了新項目pythoncom擅長類型:

https://github.com/pyxll/exceltypes

這包括excelRTDServer.py略加修改的版本使用新的類型PyIRTDUpdateEvent而不是win32com makepy包裝,所以它現在可以在Excel 2010中使用(請在exceltypes/demos/excelRTDServer.py中查找註釋'EXCELTYPES_MODIFICATION')。

構建項目將需要安裝Visual Studio(它不會建立與GCC),你可以使用包含在項目的setup.py如下構建它:

python setup.py install 

如果你需要迫使它使用Visual Studio例如,如果您使用anaconda,而不是gcc,請使用"--compiler=msvc"選項。 如果你想使用Visual Studio 2012而不是默認的2010年添加以下行setup.py

from distutils import msvc9compiler 
msvc9compiler.VERSION = 11 
0

該錯誤消息時ü把它像「for'環有時升高,這裏是一個hackly解決方案4u:導入時間,並在您的循環中使用'sleep()'