Worum es geht
Für Talanx Reinsurance Broker sollte ein Datenaustausch zwischen MS Word Dokumenten und einer bestehenden ASP.NET Webanwendung realisiert werden.
Über die Anwendung werden Word-Dokumente erstellt und zum Download angeboten. Der Benutzer nimmt an diesen Dokumenten in seiner lokalen Word-Instanz Überarbeitungen vor. Danach soll das komplette Word-Dokument mit einem Word-Makro wieder in die Webanwendung hochgeladen werden.
Das Ganze sollte für MS Word ab Version 2010 funktionieren.
Die serverseitige Erstellung der Word-Dokumente aus Templates war mit dem Open XML SDK recht problemlos zu realisieren.
Der kritische Punkt war der Upload von Word nach ASP.NET.
Die Umsetzung
Die ASP.NET Webanwendung stellt eine Seite für den programmatischen Upload des Dokuments bereit. Das Hochladen wird automatisch durch ein VBA-Makro in dem Word-Dokument durchgeführt. Wichtig hierbei ist mir gewesen, dass der HTTP Post so aufgebaut ist, dass auf der ASP.NET-Seite das Dokument in der Files Auflistung des HttpRequest-Objektes, mit dem wir den HTTP Post entgegen nehmen, enthalten ist. Das bietet den Vorteil, dass der Inhalt des HTTP Post nicht eigenhändig geparsed werden muss, sondern die vom .NET Framework eingebauten Mechanismen genutzt werden können.
Hierfür habe ich in MS Word ein Makro geschrieben. Das Makro selbst speichert zuerst das aktuelle Dokument um sicherzustellen, dass der aktuellste Stand übertragen wird.
Dann wird der Inhalt des Dokuments als byte Array ausgelesen, um den HTTP Post zusammenbauen zu können.
Oops, an error occurred! Code: 202411110120508196a889Dieser wird dann an die ASP.NET Seite geschickt.
Oops, an error occurred! Code: 20241111012050f8b75f47Auf der ASP.NET Seite können wir das Word-Dokument aus der Files Auflistung des HttpRequest-Objekts auslesen und weiterverarbeiten.
Word Variablen zur Parameterübergabe
Da die URL der ASP.NET-Anwendung nicht statisch im Word-Dokument hinterlegt werden soll, musste ich eine Lösung finden, bei der die URL durch die Webanwendung in dem Dokument hinterlegt werden kann.
Hier habe ich wieder auf das Open XML SDK zurückgegriffen.
Das SDK bietet die Möglichkeit, in einem Word-Dokument Variablen zu setzen.
Oops, an error occurred! Code: 202411110120506908d052Im Word-Makro kann jetzt problemlos auf die Variable zugegriffen werden. So war es mir möglich die URL dynamisch zu übergeben.
Oops, an error occurred! Code: 20241111012050fd14cec8Fazit
Der Datenaustausch zwischen ASP.NET und VBA funktioniert sehr gut, wenn man weiß, worauf man achten muss. Hat man die ersten Hindernisse überwunden, kommt man schnell zu Ergebnissen. Das Open XML SDK ist hierbei eine große Hilfe gewesen, und wird mittlerweile auch in anderen Bereichen, in denen es um die Erzeugung und Änderung von Word-Dokumenten geht, von mir eingesetzt.