2012-04-03 18 views
8

değerini 7 olarak değiştirerek excelRTDserver.py Excel 2010'da (32bit) çalışıyorum. Sunucuyu eklenti listesinde görebilirim ve bir hücreye =RTD("Python.RTD.TimeServer","","seconds","5") girersem geçerli saati alırım. Ama asla güncellenmez. "5" i başka bir numaraya değiştirirsem, bir güncelleme alırım ancak ilk değişiklikten sonra hiçbir zaman tekrar değişmez.Python'daki Excel RTD sunucusu verileri güncelleştirmiyor

Güncelleştirmek için nasıl alabilirim? Benzer bir problemle başka bir tane buldum here, ama çözüm yok.

GÜNCELLEME: Biraz daha ileride var - PyStarispatch geri arama nesnesini bir IRTDUpdateEvent geriçağırım nesnesine dönüştürürken ServerStart içinde yükseltilen bir özel durum var. Hata iletisini yakalamak için this method kullanarak, "Bu dosya zaten var olduğunda bir dosya oluşturulamıyor" alıyorum. here öneriyi takip edersem ve win32com.client.CastTo(CallbackObject,'IRTDUpdateEvent')'u kullanırsam "Bu COM nesnesi, ustaca işlemi otomatikleştiremez - lütfen bu nesne için elle maketle çalıştırılsın", ancak Microsoft Excel 12.0 Nesne Kitaplığı (1.6) için çok çalışıyorum.

Herhangi bir yardım büyük memnuniyetle karşılanacaktır.

cevap

3

Ben şans dışında olabilir düşünüyorum.

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

:

bu yanıtta olduğu mesajı için kesin sorunu açıklar ve böylece belki de zaten doğrudan bu bilgi var, son, ama durumda değil mi ...

Ben IRTDUpdateEvent aranız excel son sürümlerinde bazı değişiklikler yapılmış korkuyorlar (Excel 2007 yılından bu yana? I ... bu artık o kadar 'son' değil sanırım).

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

beni endişelendiriyor bölüm bu yorumdur: arayüz değişiklikleri haberleri etrafında avcılık yaparken

, bir java forumda bu iplik rastladı

"Görünüşe Excel 12'de (Excel 2007), , çift IRTDUpdateEvent arabirimi, IDispatch yoluyla çağrıldığında istisna (genel COM özel durum 0x80020009) uygular. f v-tablo 'u kullanarak aramayı UpdateNotify başarılılarına bağlarsınız. eğer bu doğruysa ben gerçekten ". o Excel 12 veya bir özelliğin bir hata olup olmadığını ben ... MSDN bilgilere karşı Bunu doğrulamak mümkün olmamıştır Şimdiye kadar

biliyorum Ama yok Size onunla olarak pywin32 geçirerek çözeriz sanmıyorum, web üzerinde. sorun görülüyor açıklamak Birçok eski örnekler etmez ve pywin32 + ıdispatch, olarak bu arayüz tedavi etmek ve uygun şekilde sarılıyor makepy.

benim anlayışım, IDispatch desteğine dayanmasıdır. comtypes'e bakmanız gerekebilir (http://starship.python.net/crew/theller/comtypes /) (yeni?) IRTDUpdateEvent nesnelerini veya belki bir C uzantısını sarmak için. :(

+0

Evet, ben de orada bir soru yayınladım. Şansım yokmuş gibi gözüküyor. – MatlabSorter

1

Python: alıyorum

"makepy işlemini otomatik hale getiremeyiz Bu COM nesnesi - bu nesne için makepy elle çalıştırın", ama ben zaten Microsoft Excel 12.0 Nesne Kitaplığı için makepy yayınlandıktan (1.6) . Bir süre sorunuzu okuduktan sonra iş yerinde

Dün, python'un değil java :)) .. Evet, artık düşünüyorum tek şey ofiste 2010.

için PIA çalıştırmak için gereken görünüyor olmasıdır unuttum

Daha sonra düzenle: Steel size söylediklerimden sonra sorun yaşıyorsa, lütfen yorum yapın ve reddetmeyin, çünkü bu sorun nadirdir.

JAVA:

Bunun nedeni v tablolar oluşturma seçeneğiniz eksik olur.

Sen ServerStart yöntem ve ayrıca IRTDServer arayüzü ve IRTDServer_Impl class değiştirmeniz gerekir. Böylece CallbackObjectCOMIUnknown olduğunu. Daha sonra IBuilder'u çalıştırarak IRTDServer_Skel sınıfını oluşturmanız gerekir.

Artık v tablo istemek için IRTDUpdateEvent için yeni bir java sarmalayıcı oluşturabilirsiniz:

enter image description here

+0

Yanıt için teşekkür ederiz. Ancak, bir Python çözümü arıyorum. Ne yazık ki Java’da akıcı değilim. – MatlabSorter

+0

Cevabımı güncelliyorum. –

+0

Downvote ben değildim, yardım istiyorum ve sen veriyorsun.Maalesef PIA'yı kurdum ama yardım etmedi. – MatlabSorter

3

bu soruna ben türlerini excel pythoncom için github yeni bir proje oluşturduk:

https://github.com/pyxll/exceltypes

Bu yeni türünü kullanan excelRTDServer.py biraz değiştirilmiş bir sürümünü içerir PyIRTDUpdateEventwin32com makepy sarmalayıcı yerine, şimdi Excel 2010'da çalışır (yorumlarına exceltypes/demos/excelRTDServer.py).

Proje yüklü görsel stüdyo gerekecektir (gcc ile inşa etmeyeceğini) ile aşağıdaki gibi projeye dahil setup.py kullanarak inşa edebilirsiniz:

python setup.py install 

görsel stüdyo kullanmaya zorlamak gerekiyorsa Örneğin gcon kullanıyorsanız, anaconda kullanıyorsanız "--compiler=msvc" seçeneğini kullanın. Eğer setup.py aşağıdaki satırları ekleyin varsayılan 2010 yerine Visual Studio 2012 kullanmak istiyorsanız:

from distutils import msvc9compiler 
msvc9compiler.VERSION = 11 
0

u 'for'-döngü gibi bir şey koymak bazen yükseltilir O hata mesajı, burada olduğu hackly çözüm 4u: içe aktarma süresi ve döngüdeki 'sleep()' işlevini kullanın

İlgili konular