Excel-RTD-Server in Python, der Daten nicht aktualisiert

8

Ich habe die excelRTDserver.py wird in Excel 2010 (32bit) ausgeführt, indem der Wert EXCEL_TLB_MINOR in 7 geändert wird. Ich kann den Server in der Add-Ins-Liste sehen und wenn ich =RTD("Python.RTD.TimeServer","","seconds","5") in eine Zelle eintrage, erhalte 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.

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

UPDATE: Ich habe ein wenig weiter - es gibt eine Ausnahme in ServerStart, wenn das PyIDispatch-Callback-Objekt in ein IRTDUpdateEvent-Callback-Objekt umgewandelt wird. Mit dieser Methode zum Erfassen der Fehlermeldung erhalte ich "Kann keine Datei erstellen, wenn diese Datei bereits existiert.". Wenn ich dem Vorschlag hier folge und win32com.client.CastTo(CallbackObject,'IRTDUpdateEvent') verwende, bekomme ich "This COM Objekt kann den Makepy-Prozess nicht automatisieren - bitte führen Sie 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.

    
MatlabSorter 03.04.2012, 00:12
quelle

4 Antworten

3

Ich denke, Sie haben vielleicht kein Glück.

Laut dem Autor von "excelRTDServer.py" in einem kürzlichen python-win32-Thread :

Die Nachricht, dass dies eine Antwort darauf ist, beschreibt Ihr genaues Problem, und es ist neu, also haben Sie diese Information vielleicht schon direkt, aber für den Fall, dass Sie nicht ...

  

Ich befürchte, dass sich Dinge mit IRTDUpdateEvent mit den letzten Versionen geändert haben   von Excel (seit Excel 2007? Ich denke, das ist nicht mehr so ​​"neu" ...).

     

Bei der Suche nach Neuigkeiten über Schnittstellenänderungen bin ich auf dieses Problem gestoßen   Thread in einem Java-Forum:

     

Ссылка

     

Der Teil, der mich beunruhigt, ist dieser Kommentar:

     
    

"Scheinbar in Excel 12 (Excel 2007) das RTD-Callback-Objekt, das     Implementiert duale IRTDUpdateEvent-Schnittstelle löst Ausnahme (generische COM     Ausnahme 0x80020009) wenn über IDispatch aufgerufen wird. Wenn Sie V-Tabelle verwenden     Die Bindung an UpdateNotify ist erfolgreich. Ich weiß nicht wirklich, ob es so ist     ist ein Fehler in Excel 12 oder einem Feature. "

  
     

Bisher konnte ich dies nicht anhand der MSDN-Informationen bestätigen ...   Aber wenn das stimmt, erklärt es das Problem, das gesehen wird. Viele älter   Beispiele im Web, und pywin32 + makepy behandeln diese Schnittstelle als IDispatch,   und wickle es entsprechend.

     

Ich denke nicht, dass wir das mit pywin32 so beheben können, wie es jetzt ist. Meine   Verständnis ist, dass es auf IDispatch-Unterstützung beruht. Müssen Sie sehen müssen   comtypes (http://starship.python.net/crew/theller/comtypes/) um den   (neu?) IRTDUpdateEvent-Objekte oder vielleicht eine C-Erweiterung. : (

    
blahdiblah 11.04.2012, 22:18
quelle
3

Um dieses Problem zu umgehen, habe ich ein neues Projekt auf github für Pythoncom-Excel-Typen erstellt:

Ссылка

Dies beinhaltet eine leicht modifizierte Version von excelRTDServer.py , die den neuen Typ PyIRTDUpdateEvent anstelle des win32com makepy Wrappers verwendet, und so funktioniert es jetzt in Excel 2010 (sucht nach den Kommentaren 'EXCELTYPES_MODIFICATION' in exceltypes/demos/excelRTDServer.py ).

Um das Projekt zu erstellen, müssen Sie Visual Studio installiert haben (es wird nicht mit gcc erstellt) und Sie können es mit der im Projekt enthaltenen Datei setup.py wie folgt erstellen:

%Vor%

Wenn Sie erzwingen müssen, Visual Studio anstelle von gcc zu verwenden, verwenden Sie die Option "--compiler=msvc" , wenn Sie beispielsweise Anaconda verwenden. Wenn Sie Visual Studio 2012 anstelle von Standard 2010 verwenden möchten, fügen Sie folgende Zeilen zu setup.py hinzu:

%Vor%     
Tony Roberts 04.06.2014 10:02
quelle
1

Python:

Ich bekomme "Dieses COM-Objekt kann den makepy-Prozess nicht automatisieren - bitte führen Sie makepy manuell für dieses Objekt aus", aber ich habe bereits makepy für die Microsoft Excel 12.0-Objektbibliothek (1.6) ausgeführt.

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

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

JAVA:

Dies passiert, weil die Option zum Erstellen von v-tables fehlt.

Sie müssen die Methode ServerStart ändern und auch IRTDServer interface und IRTDServer_Impl class ., also CallbackObject ist COMIUnknown . Dann müssen Sie die Klasse IRTDServer_Skel generieren, indem Sie den IBuilder ausführen.

Jetzt können Sie einen neuen Java-Wrapper für IRTDUpdateEvent generieren, um v-table anzufordern:

    
Voislav Sauca 11.04.2012 10:33
quelle
0

Diese Fehlermeldung wird manchmal angezeigt, wenn Sie sie in etwas wie 'for'-loop setzen, hier ist eine hackly Lösung 4u: Zeit importieren und' sleep () 'in Ihrer Schleife verwenden

    
JAkeys 23.12.2014 11:53
quelle

Tags und Links