2012-04-03 1 views
8

Ich habe die excelRTDserver.py in Excel 2010 (32bit) ausgeführt und durch Ändern der EXCEL_TLB_MINOR Wert zu 7. Ich kann den Server in der Add-Ins-Liste sehen und wenn ich =RTD("Python.RTD.TimeServer","","seconds","5") in eine Zelle eingeben, bekomme ich die aktuelle Zeit. Aber es wird nie aktualisiert. Wenn ich die "5" in eine andere Nummer ändere, erhalte ich ein Update, aber nach der ersten Änderung wird es nie wieder geändert.Excel RTD-Server in Python keine Daten aktualisieren

Wie bekomme ich es zu aktualisieren? Ich habe jemand anderen mit einem ähnlichen Problem gefunden here, aber keine Lösung.

UPDATE: Ich habe ein wenig weiter - es gibt eine Ausnahme innerhalb ServerStart beim Gießen der PyIDispatch Callback-Objekt in ein IRTDUpdateEvent Callback-Objekt. Unter Verwendung this method, um die Fehlermeldung zu erfassen, bekomme ich "kann keine Datei erstellen, wenn diese Datei bereits existiert.". Wenn ich dem Vorschlag here folge und win32com.client.CastTo(CallbackObject,'IRTDUpdateEvent') benutze, bekomme ich "Dieses COM-Objekt kann den Makepy-Prozess nicht automatisieren - bitte führe makepy manuell für dieses Objekt aus", aber ich habe bereits makepy für Microsoft Excel 12.0 Object Library (1.6) ausgeführt.

Jede Hilfe würde sehr geschätzt werden.

Antwort

3

Ich denke, man Pech sein kann.

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

Die Nachricht, dass diese in Antwort ist auf Ihr genaues Problem beschreibt, und es ist neu, so vielleicht schon Sie diese Informationen direkt erhalten, aber Sie haben für den Fall nicht ...

Ich fürchte, dass die Dinge mit IRTDUpdateEvent haben mit den letzten Versionen geändert von Excel (seit Excel 2007? Ich denke, das ist nicht so ‚aktuell‘ mehr ...).

Während um Änderungen für Nachrichten der Schnittstelle Jagd, stieß ich auf diese Thread in einem Java-Forum:

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

Der Teil, der mir Sorgen macht diesen Beitrag:

„Anscheinend In Excel 12 (Excel 2007) löst das RTD-Callback-Objekt , das die duale IRTDUpdateEvent-Schnittstelle implementiert, eine Exception (generische COM Ausnahme 0x80020009) aus, wenn es über IDispatch aufgerufen wird Wenn Sie v-table verwenden, ist der Aufruf von UpdateNotify erfolgreich. Ich weiß nicht wirklich, ob es ist ein Fehler in Excel 12 oder einer Funktion.“

Bisher habe ich nicht in der Lage gewesen, dies gegen die MSDN Informationen zu bestätigen ... Aber wenn das wahr ist es ist das Problem gesehen wird, nicht erklären. Viele älteren Beispiele auf dem Netz, und pywin32 + Makepy diese Schnittstelle als IDispatch zu behandeln, und entsprechend verpacken.

ich glaube nicht, dass wir dies mit pywin32 wie es beheben Jetzt ist mein. Verständnis ist, dass es auf IDispatch-Unterstützung beruht. Möglicherweise müssen Sie auf comtypes (http://starship.python.net/crew/theller/comtypes /) um die (new?) IRTDUpdateEvent-Objekte oder möglicherweise eine C-Erweiterung zu umbrechen. :(

+0

Ja, ich habe die Frage auch dort gepostet. Es sieht so aus, als hätte ich kein Glück. – MatlabSorter

1

Python:

ich "Das COM-Objekt des makepy Prozess nicht automatisieren können - bitte laufen makepy manuell für dieses Objekt", aber ich habe bereits makepy für Microsoft Excel 12.0 Object Library (1.6) läuft .

Gestern bei der Arbeit nach einer Weile Ihrer Frage zu lesen, ich habe vergessen, dass Python und nicht die Java :)) .. Nun, das einzige, was ich jetzt denke, dass Sie die PIA für Office 2010.

zu laufen scheint brauchen

Bearbeiten Sie später: Wenn Sie Probleme haben nach dem, was ich Ihnen gesagt habe, kommentieren Sie bitte und nicht downvote, weil dieses Problem ungewöhnlich ist.

JAVA:

Dies geschieht, weil sich die Option fehlt v-Tabellen zu erzeugen.

Sie benötigen Server Methode und auch IRTDServer Schnittstelle und IRTDServer_Impl class zu ändern., So CallbackObject ist COMIUnknown. Dann müssen Sie IRTDServer_Skel Klasse generieren, indem Sie den IBuilder ausführen.

Jetzt können Sie einen neuen Java-Wrapper für IRTDUpdateEvent anfordern V-Tabelle erzeugen:

enter image description here

+0

Danke für die Antwort, es wird geschätzt. Ich suche jedoch eine Python-Lösung. Leider kann ich Java nicht fließend sprechen. – MatlabSorter

+0

Ich aktualisiere meine Antwort. –

+0

Der Downvote war nicht ich, ich bitte um Hilfe und du gibst es.Leider habe ich die PIA installiert, aber es hat nicht geholfen. – MatlabSorter

3

, um dieses Problem zu umgehen Ich habe ein neues Projekt auf Github erstellt für pythoncom Typen zeichnen:

https://github.com/pyxll/exceltypes

Dazu gehört eine leicht modifizierte Version von excelRTDServer.py, die den neuen Typ verwendet PyIRTDUpdateEvent anstelle der win32com makepy Wrapper, und so funktioniert es jetzt in Excel 2010 (suchen Sie nach den Kommentaren 'EXCELTYPES_MODIFICATION' in exceltypes/demos/excelRTDServer.py).

Um die zu bauen Projekt wird von Visual Studio müssen installiert ist (es wird nicht mit gcc bauen) und Sie können es die setup.py in das Projekt mit Hilfe bauen wie folgt:

python setup.py install 

Wenn Sie es zwingen müssen Visual Studio zu verwenden anstelle von gcc verwenden Sie die Option "--compiler=msvc", wenn Sie zum Beispiel Anaconda verwenden. Wenn Sie anstelle der Standard-2010 fügen Sie die folgenden Zeilen zu setup.py Visual Studio 2012 verwenden:

from distutils import msvc9compiler 
msvc9compiler.VERSION = 11 
0

Diese Fehlermeldung manchmal ausgelöst, wenn u es in so etwas wie ‚for'-Schleife setzen, ist hier ein hackly solution 4u: importiere die Zeit und benutze 'sleep()' in deiner Schleife