Also, mein Name ist Mikhail und ich bin CTO bei Exerica. Eines der Probleme, die wir lösen, besteht darin, Finanzanalysten die Arbeit mit numerischen Daten zu erleichtern. Sie arbeiten normalerweise sowohl mit den Originaldokumenten der finanziellen und statistischen Berichterstattung als auch mit einer Art Werkzeug zum Erstellen und Verwalten von Analysemodellen. So kam es, dass 99% der Analysten in Microsoft Excel arbeiten und dort recht komplexe Dinge tun. Daher ist die Übertragung von Excel auf andere Lösungen nicht effizient und praktisch unmöglich. Objektiv erreichen die "Cloud" -Dienste von Tabellenkalkulationen noch nicht die Funktionalität von Excel. In der modernen Welt sollten Tools jedoch bequem sein und die Erwartungen der Benutzer erfüllen: per Mausklick öffnen, bequem suchen. Die Implementierung in Form verschiedener nicht verwandter Anwendungen wird weit von den Erwartungen des Benutzers entfernt sein.
Wie der Analyst arbeitet, sieht ungefähr so aus: Die Hauptdaten hier sind numerische "Finanzindikatoren", zum Beispiel das Einkommen für das 1. Quartal 2020. Der Einfachheit halber werde ich sie einfach als "Zahlen" bezeichnen. Wie Sie sehen, gibt es fast keinen Zusammenhang zwischen den Zahlen im Dokument und im analytischen Modell, alles ist nur im Kopf des Analytikers. Die Arbeit mit dem Ausfüllen und Verwalten des Modells dauert Stunden, bis Zahlen aus dem Dokument in Tabellen gesucht und unterbrochen und dann nach Eingabefehlern gesucht werden. Gleichzeitig möchten wir dem Benutzer vertraute Tools anbieten: Drag & Drop, Einfügen durch die Zwischenablage usw. sowie eine schnelle Ansicht der Quelldaten.
Was wir schon hatten
Als wir mit der Implementierung der interaktiven Interaktion mit Excel in der in diesem Artikel beschriebenen Form begannen, verfügten wir bereits über eine Datenbank in MongoDB, ein Backend in Form einer REST-API in .NET Core, ein Front- End-SPA in Angular und einige andere Dienste. Zu diesem Zeitpunkt haben wir bereits verschiedene Optionen für die Integration in Tabellenkalkulationsanwendungen, einschließlich Excel, ausprobiert. Alle Optionen gingen nicht über MVP hinaus. Dies ist jedoch ein Thema für einen separaten Artikel.

Daten verknüpfen
In Excel gibt es zwei gängige Tools, mit denen das Problem der Verknüpfung von Daten in einer Tabelle mit Daten im System gelöst werden kann: RTD (RealTimeData) und UDF (User-Defined Functions). Pure RTD ist in Bezug auf die Syntax weniger benutzerfreundlich und schränkt die Flexibilität der Lösung ein. Mit UDF können Sie eine benutzerdefinierte Funktion erstellen, die auf eine Weise funktioniert, die einem Excel-Benutzer vertraut ist. Es kann in anderen Funktionen verwendet werden, versteht Referenzen wie A1 oder R1C1 und verhält sich im Allgemeinen so, wie es sollte. Gleichzeitig stört es niemanden, den RTD-Mechanismus zu verwenden, um den Funktionswert zu aktualisieren (was wir getan haben). Wir haben UDF in Form eines Excel-Add-Ins mit dem bekannten C # und .NET Framework entwickelt. Wir haben die Excel-DNA- Bibliothek verwendet, um die Entwicklung zu beschleunigen .
Zusätzlich zu UDF implementiert unser Add-In eine Multifunktionsleiste (Symbolleiste) mit Einstellungen und einigen nützlichen Funktionen für die Arbeit mit Daten.
Interaktivität hinzufügen
Um Daten nach Excel zu übertragen und Interaktivität herzustellen, haben wir einen separaten Dienst entwickelt, der eine Websocket-Verbindung über die SignalR-Bibliothek bereitstellt und tatsächlich ein Broker für Nachrichten über Ereignisse ist, die von den Front-End-Teilen des Systems in Echtzeit ausgetauscht werden sollen. Wir nennen es Benachrichtigungsservice.

Daten in Excel einfügen
In unserem SPA markieren wir alle vom System erkannten Nummern. Der Benutzer kann sie auswählen, durch sie navigieren usw. Für das Einfügen von Daten haben wir drei Mechanismen implementiert, um verschiedene Anwendungsfälle zu schließen:
- Drag & Drop
- Automatisches Einfügen beim Klicken in SPA
- Kopieren und Einfügen über die Zwischenablage
Wenn der Benutzer ein Drag'n'Drop einer bestimmten Nummer aus dem SPA initiiert, wird eine Verbindung mit der Kennung dieser Nummer aus unserem System (
.../unifiedId/005F5549CDD04F8000010405FF06009EB57C0D985CD001) zum Ziehen hergestellt . Beim Einfügen in Excel fängt unser Add-In das Einfügeereignis ab und analysiert den eingefügten Text mit regulärem Ausdruck. Wenn ein gültiger Link im laufenden Betrieb gefunden wird, wird er durch die entsprechende Formel ersetzt =ExrcP(...).
Wenn Sie über den Benachrichtigungsdienst auf eine Nummer im SPA klicken, wird eine Nachricht an das Add-In gesendet, die alle zum Einfügen der Formel erforderlichen Daten enthält. Als nächstes wird die Formel einfach in die aktuell ausgewählte Zelle eingefügt.
Diese Methoden eignen sich gut, wenn der Benutzer eine Zahl in sein Modell einfügen muss. Wenn er jedoch die gesamte Tabelle oder einen Teil davon übertragen muss, ist ein anderer Mechanismus erforderlich. Das Kopieren durch eine Zwischenablage scheint den Benutzern am vertrautesten zu sein. Diese Methode erwies sich jedoch als komplizierter als die ersten beiden. Tatsache ist, dass die eingefügten Daten der Einfachheit halber im nativen Excel-Format - OpenXML Spreadsheet - dargestellt werden sollten. Dies lässt sich am einfachsten mithilfe des Excel-Objektmodells, dh des Add-Ins, implementieren. Daher sieht der Prozess zum Erstellen einer Zwischenablage folgendermaßen aus:
- Der Benutzer wählt einen Bereich mit Nummern im SPA aus
- Ein Array von zugewiesenen Nummern wird an den Benachrichtigungsdienst übergeben
- Der Benachrichtigungsdienst leitet es an das Add-In weiter
- Addin generiert OpenXML und fügt es in die Zwischenablage ein
- Der Benutzer kann Daten aus der Zwischenablage an einer beliebigen Stelle in einer beliebigen Excel-Tabelle einfügen.

Trotz der Tatsache, dass Daten dank SignalR und RTD einen langen Weg zurücklegen, geschieht dies recht schnell und wird vom Benutzer abstrahiert.
Wir verbreiten Daten
Nachdem der Benutzer die Anfangsdaten für sein Modell ausgewählt hat, muss er alle interessierenden Zeiträume (Jahre, Semester und Quartale) "verbreiten". Für diese Zwecke ist einer der Parameter unserer UDF das Datum (der Zeitraum) dieses Datums (denken Sie daran: "Einkommen für das 1. Quartal 2020"). Excel verfügt über einen systemeigenen Mechanismus zum "Verteilen" von Formeln, mit dem Sie Zellen mit derselben Formel füllen können, wobei die in den Parametern angegebenen Referenzen berücksichtigt werden. Das heißt, anstelle eines bestimmten Datums wird ein Link dazu in die Formel eingefügt, und der Benutzer "erweitert" ihn auf andere Zeiträume, während die "gleichen" Zahlen aus anderen Zeiträumen automatisch in die Tabelle geladen werden.
Und wie lautet diese Nummer?
Der Benutzer hat jetzt ein Modell mit mehreren hundert Zeilen und mehreren Dutzend Spalten. Und er hat vielleicht eine Frage, was gibt es für die Nummer in Zelle L123? Um eine Antwort zu erhalten, muss er nur auf diese Zelle klicken. In unserem SPA wird derselbe Bericht auf der Seite geöffnet, auf der die angeklickte Nummer geschrieben ist, und die Nummer im Bericht wird hervorgehoben. So:
Und wenn dies nicht nur eine Zahl aus dem Bericht ist, sondern das Ergebnis einiger Berechnungen der aus dem Bericht entnommenen Zahlen, werden wir alle Zahlen hervorheben, die in dem in Excel berechneten Ausdruck enthalten sind. Dadurch wird nicht die gesamte Anwendung und alle erforderlichen Daten heruntergeladen, wie im Fall eines Links.
Als Schlussfolgerung
Dies ist meiner Meinung nach eine nicht standardmäßige Implementierung der Interaktion zwischen Excel und einer Webanwendung, die sich als recht benutzerfreundlich herausstellte. Dank der Verwendung von Excel ist der Eintrittsschwellenwert für Benutzer der Zielgruppe recht niedrig. Gleichzeitig erhalten wir die gesamte Leistungsfähigkeit von Excel für die Arbeit mit numerischen Daten. Die Daten selbst bleiben immer mit der Quelle sowie zeitlich verknüpft. Für Zielkunden ist es nicht erforderlich, völlig neue externe Systeme in den Geschäftsprozess der Arbeit mit Daten einzubauen. Unsere Lösung ist als zusätzliches „Tool“ in Excel eingebettet, dem De-facto-Standard für Finanzdatenanbieter.
Ein ähnlicher architektonischer Ansatz zur Integration von Webanwendungen in Microsoft Excel kann auf andere Aufgaben angewendet werden, die Interaktivität und komplexe Benutzeroberflächen erfordern, wenn mit numerischen und tabellarischen Daten gearbeitet wird.