2010-11-27 5 views
1

Ich habe einen RTD-Server, der die Werte von einer Echtzeitquelle erhält. Das Problem ist, dass die Benutzer ziemlich große Excel-Tabellen in der Nähe von 20.000 RTD-Formeln haben. Wenn der Benutzer das Blatt öffnet, werden alle RTD-Formeln ausgelöst, wodurch 20.000 Abfragen an den Server gesendet werden. Dies funktioniert zunächst, aber der Server kann viel besser arbeiten, wenn ich die Abfragen gruppieren und an den Server senden kann.Wie alle RTD-Aufrufe bei Excel-Start zu sammeln?

Meine Idee war es, eine Flagge zu halten. Wenn die Berechnung beginnt, wird das Flag auf false gesetzt, und wenn die Berechnung endet, kann ich sie zurücksetzen. Wenn eine RTD-Formel aufgerufen wird und die Markierung nicht gesetzt ist, wird die Abfrage nicht an den RTD-Server gesendet, sondern zusammengelegt. Wenn das Flag auf "true" gesetzt ist, kann ich die gepoolten Abfragen kombinieren und an den Server senden.

Ich bin mir nicht sicher, wie ich die Benachrichtigung erhalten soll, wenn Excel beginnt zu berechnen. Bitte helfen Sie. Auch wenn Sie einen anderen Ansatz zur Lösung dieses Problems kennen, wäre es großartig. Ich verwende Excel 2007, C# 3.5

Bitte helfen. Vielen Dank. Rashmi

Danke,

+0

Berechnung Da RTD Daten aktualisiert, wenn Excel inaktiv ist, erhält es weiterhin Informationen, wenn sich Excel im manuellen Berechnungsmodus befindet. In diesem Fall werden die neuen Daten zwischengespeichert und die aktuellen Werte werden verwendet, wenn eine manuelle Berechnung durchgeführt wird. –

Antwort

2

Da Sie RTD verwenden, frage ich mich, ob dies funktionieren könnte:

Sie machen Anrufe an die Back-End in einer zeitlich abgestimmten Chargen. Sie starten einen Timer in dem ersten RTD-Aufruf - eine kurze Zeit, vielleicht 500ms, dann erstellen Sie einen Stapel von allen Aufrufen an Ihren RTD-Server bis der Timer abläuft, dann senden Sie den Stapel an das Back-End und warten auf die Antwort, während ein neuer Stapel auf dem Client gestartet wird. Wenn die Stapelantwort eintrifft, benachrichtigen Sie Excel, dass die Zweige aktualisiert wurden, und wenn Excel RefreshData aufruft, geben Sie die einzelnen Elemente aus Ihrer Stapelantwort zurück. Auf diese Weise verwendet Ihr Batching die Async-Funktion von RTD effektiv, aber Sie sind nicht an die Neuberechnungsereignisse von Excel gebunden.

Hope das macht Sinn.

Verwandte Themen