2013-05-30 6 views
5

Ich habe einen RTD-Server für Excel in C# erstellt, die ständig Zellen mit Daten aktualisiert und mit mehreren Instanzen von Excel arbeiten muss. Das Problem ist, wenn ich dieselbe RTD-Formel in mehr als einer Instanz von Excel habe und die Formel in einer der Excel-Instanzen lösche, ruft sie die DisconnectData-Methode im RTD-Server auf, damit die identischen Formeln in den anderen Excel-Instanzen nicht mehr aktualisiert werden obwohl sie immer noch aktualisiert werden sollten.C# Excel RTD Server Mehrere Instanzen trennen alle Formeln auf einem Blatt stoppt Formeln auf der anderen

Gibt es eine Möglichkeit in C#, jede Excel-Instanz mit einem eigenen RTD-Server zu erzwingen oder den RTD-Server mehrere Instanzen von Excel ordnungsgemäß zu erkennen und zu überprüfen, dass alle Instanzen einer Formel aus allen gelöscht wurden Excel-Arbeitsmappen vor dem Aufrufen der DisconnectDatamethod in meinem RTD-Server.

Antwort

2

Unter der Annahme, dass Ihre RTD-Funktionen mit einer UDF umschlossen sind, wäre eine Lösung, jedem Arbeitsblatt innerhalb des UDF-Aufrufs eine Kennung (z. B. Guid) zuzuweisen. Sie können den Bezeichner als benutzerdefinierte Arbeitsblatteigenschaft beibehalten und ihn dann jedem ausgehenden RTD-Zweig hinzufügen, was zu einem eindeutigen Satz von Themen für jedes Arbeitsblatt führt, wenn sie bei Ihrem RTD-Server ankommen.

Der Zugriff auf eine benutzerdefinierte Arbeitsblatteigenschaft mit jedem RTD-Aufruf wirkt sich jedoch auf die Leistung aus, wenn eine große Anzahl von Funktionen verarbeitet wird. Daher sollten Sie den Bezeichner für kurze Zeit zwischenspeichern. Eine Möglichkeit, dies zu tun, besteht darin, eine vom Worksheet-Objekt codierte Dictionary-Suche zu verwalten. Rufen Sie im Rahmen jedes UDF-Aufrufs das Arbeitsblatt ab, dem die aufrufende Zelle über die Application.Caller-Eigenschaft zugeordnet ist (umwandeln Sie es in einen Bereich, und rufen Sie die Arbeitsblatteigenschaft ab), und suchen Sie dann den Bezeichner im Wörterbuch.

0

Ich denke, es ist Ihr Problem http://support.microsoft.com/kb/284883 Wie registrieren Sie Ihren RTD-Server? Ist es DCOM-Objekt?

+0

Ich stieß auf diesen Artikel, als ich versuchte, die Antwort zu finden, aber es hatte nur das Beispiel VB und ich konnte nicht finden, wie man das mit C# macht. Es wurde über Visual Studio registriert, indem die DLL als COM-Visible markiert und für COM-Interop registriert wurde. Der RTD-Server ist nur ein COM-Objekt, nicht DCOM. – Megaman82

+0

Haben Sie diesen Artikel http://msdn.microsoft.com/en-us/library/windows/desktop/ms693716(v=vs.85).aspx angeschaut? Ich habe meine Praxis CLSCTX_INPROC_SERVER in CoCreateInstance verwendet –

Verwandte Themen