2012-04-03 17 views
8

Ho installato il excelRTDserver.py in Excel 2010 (32 bit) modificando il valore EXCEL_TLB_MINOR in 7. Riesco a vedere il server nell'elenco dei componenti aggiuntivi e inserendo =RTD("Python.RTD.TimeServer","","seconds","5") in una cella, ottengo l'ora corrente. Ma non si aggiorna mai. Se cambio il "5" in un altro numero, ottengo un aggiornamento ma dopo la modifica iniziale non cambia più.Server RTD Excel in Python che non aggiorna i dati

Come faccio ad aggiornarlo? Ho trovato qualcun altro con un problema simile here, ma nessuna soluzione.

AGGIORNAMENTO: Ho un po 'oltre - c'è un'eccezione sollevata all'interno di ServerStart quando si lancia l'oggetto callback PyIDispatch in un oggetto di richiamata IRTDUpdateEvent. Utilizzando this method per acquisire il messaggio di errore, viene visualizzato "Impossibile creare un file quando tale file esiste già.". Se seguo il suggerimento here e utilizzo win32com.client.CastTo(CallbackObject,'IRTDUpdateEvent') ottengo "Questo oggetto COM non può automatizzare il processo di makepy - esegui makepy manualmente per questo oggetto", ma ho già eseguito makepy per Microsoft Excel 12.0 Object Library (1.6).

Qualsiasi aiuto sarebbe molto apprezzato.

risposta

3

Penso che si può essere fuori di fortuna.

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

Il messaggio che questo è in risposta alla tua descrive esatto problema, ed è recente, quindi forse già ottenuto direttamente queste informazioni, ma nel caso non lo ...

temo che le cose con IRTDUpdateEvent sono cambiate con le versioni recenti di Excel (dal momento che Excel 2007? Credo che non è così 'recente' più ...).

Mentre la caccia in giro per le notizie di modifiche di interfaccia, mi sono imbattuto in questo discussione in un forum java:

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

La parte che mi preoccupa è questo commento:

"Apparentemente in Excel 12 (Excel 2007) l'oggetto di richiamata RTD che implementa l'interfaccia doppia IRTDUpdateEvent genera un'eccezione (generica COM eccezione 0x80020009) quando viene chiamata tramite IDispatch. f si usa v-table vincolante la chiamata a UpdateNotify ha esito positivo. Io in realtà non so se è un bug in Excel 12 o una funzione."

Finora non sono stato in grado di confermare questo con le informazioni di MSDN ... Ma se questo è vero , lo fa spiegare il problema di essere visto. Molti anziani esempi sul web, e pywin32 + Makepy trattare questa interfaccia come IDispatch, e avvolgerlo conseguenza.

non credo che siamo in grado di risolvere questo problema con pywin32 come La mia comprensione di è che si basa sul supporto di IDispatch. Potrebbe essere necessario consultare i comtypes (http://starship.python.net/crew/theller/comtypes /) per avvolgere gli oggetti (nuovo?) IRTDUpdateEvent o forse un'estensione C. :(

+0

Sì, ho postato la domanda anche lì. Sembra che sia sfortunato. – MatlabSorter

1

Python:

ottengo "Questo oggetto COM non è in grado di automatizzare il processo di Makepy - si prega di correre Makepy manualmente per questo oggetto", ma ho già eseguito Makepy per Microsoft Excel 12.0 Object Library (1.6) .

ieri al lavoro dopo aver letto un po 'la tua domanda, mi sono dimenticato che è python e non java :)) .. Beh, l'unica cosa che penso è che ora sembra è necessario eseguire il PIA per Office 2010.

Modifica successiva: se l'acciaio ha problemi dopo quello che ti ho detto, per favore commenta e non downvotare, perché questo problema è raro.

JAVA:

Questo accade perché manca la possibilità di generare v-tavoli.

è necessario modificare metodo e anche IRTDServer interfaccia e IRTDServer_Impl classServerStart., In modo da CallbackObject è COMIUnknown. Quindi è necessario generare classe IRTDServer_Skel eseguendo il IBuilder.

Ora è possibile generare un nuovo involucro java per IRTDUpdateEvent richiedere v-table:

enter image description here

+0

Grazie per la risposta, è apprezzato. Tuttavia, sto cercando una soluzione Python. Purtroppo non sono fluente in Java. – MatlabSorter

+0

Aggiornamento la mia risposta. –

+0

Il downvote non ero io, sto chiedendo aiuto e tu me lo dai.Sfortunatamente, ho installato il PIA ma non è stato d'aiuto. – MatlabSorter

3

Per risolvere questo problema ho creato un nuovo progetto su GitHub per pythoncom eccellere tipi:

https://github.com/pyxll/exceltypes

questo include una versione leggermente modificata di excelRTDServer.py che utilizza il nuovo tipo PyIRTDUpdateEvent invece del wrapper di makepy win32com, quindi funziona ora in Excel 2010 (cerca i commenti 'EXCELTYPES_MODIFICATION' in exceltypes/demos/excelRTDServer.py).

Per costruire il progetto avrete bisogno di Visual Studio installata (non sarà costruire con gcc) e si può costruire utilizzando il setup.py incluso nel progetto come segue:

python setup.py install 

Se avete bisogno di forzarlo ad utilizzare Visual Studio invece di gcc usa l'opzione "--compiler=msvc", se stai usando anaconda per esempio. Se si desidera utilizzare Visual Studio 2012 al posto del default 2.010 aggiungere le seguenti righe per setup.py:

from distutils import msvc9compiler 
msvc9compiler.VERSION = 11 
0

Questo messaggio di errore a volte viene generato quando u mettere in qualcosa di simile a 'anello for', ecco un soluzione hacker 4u: tempo di importazione e uso 'sleep()' nel tuo ciclo

Problemi correlati