| 

.NET C# Java Javascript Exception

2
Ein Kunde von mir will Formulare als Word-Dokument hochladen und von der .NET-Anwendung, die ich ihm erstelle, ausfüllen lassen. Es sind (vorerst) nur einfache Platzhalter wie %Kunde.Name% vorgesehen. Wie gehe ich dabei am besten vor?
29.07.2009
kirt 502 2 7
1
Kannst du folgende Fragen als ergänzende Information beantworten:
Wohin werden die Formulare hochgeladen?
Wo läuft die .net-Anwendung (und welche Art der Anwendung) soll das Formular ausfüllen?
gfoidl 29.07.2009
1
Die Formulare werden auf einen Webserver hochgeladen und da dauerhaft gespeichert. Neben jedem Kunden ist jetzt ein Button "Formular X ausgefüllt laden". Der Server soll dann das ausgefüllte Formular per Download zurücksenden.
kirt 29.07.2009
3 Antworten
3
Da könntest du einfach über COM auf Word zugreifen (Office muss dann auf dem Server installiert sein) und per Suchen & Ersetzen die Platzhalter mit den konkreten Werten ersetzen.

Alternativ und wenn der Kunde das auch wünscht könnte Reporting verwenden werden. Die SQL Server Reporting Services - SSRS - (auch in der Express-Version) ermöglichen das Rendern der Ausgabe nach Word.
Somit könnte für das Formular die Vorlage auf dem SSRS gespeichert werden und mit den Daten aus der Datenbank die gefiltert nach Kunden selektiert werden zusammengeführt werden.
Du entsprechende Konfiguration der SSRS kann der Kunde auch verschiedenste Vorlagen für die Formular selbst definieren.

Wie ersichtlich ist würde ich die SSRS-Variante verwenden.
30.07.2009
gfoidl 9,4k 3 5
1
Der Editor hat leider die Formatierung entfernt. Ich werden sobald das gefixt ist die Antwort editieren.
gfoidl 30.07.2009
1
sorry - wir kümmern uns drum!
Felix 30.07.2009
1
Danke, das ist schon mal ein Ansatz. Was passiert denn, wenn ich COM nehme? Geht dann Word.exe auf dem Server auf??
kirt 30.07.2009
1
Bei der COM-Variante ist es dann auch möglich mit den Word Feldern oder Lesezeichen zu arbeiten, statt mit Suchen&Ersetzen. Kann mir vorstellen, dass das etwas performanter ist.
JackDMF 07.09.2009
2
Danke, das ist schon mal ein Ansatz. Was passiert denn, wenn ich COM nehme? Geht dann Word.exe auf dem Server auf??

Gestartet wird der Word-Prozess schon. Sichtbar auf dem Desktop (wenn du das meinst) muss es nicht sein. Das kann über die Eigenschaft (Visible) gesteuert werden.
31.07.2009
gfoidl 9,4k 3 5
2
Wir haben hier so ein automatisierungstool das sich WordPlus nennt. Da habe ich die Office Creators gemacht die diverse Dokumente generieren. Gearbeitet wird mit den sog. DocProperties. Du kannst aber auch DocVariables nehmen. Je nach dem wie viele Daten da rein müssen. DocProperties sind auf 256 Zeichen begrenzt. Die können dann sehr einfach via den Office PIA's gefüllt werden.

Bedingung ist, Word muss installiert sein und die PIA's.

Schritte:
1. Word starten (word = new Word.Application();)
2. Deine Vorlage Adden (Word.Document doc = word.Documents.Add(ref templatepath, ref missing, ref missing, ref objFalse);)
3. Durch DocProperties laufen und setzten (doc.CustomDocumentProperties)
4. Alle DocProperties aktualliserien.
Bei Punkt 4 bin ich mir nicht mehr ganz sicher. Aber ich glaube das war das hier.
foreach (Word.Range range in doc.StoryRanges)
{
range.Fields.Update();
}


Word wird erst sichtbar wenn du word.Visible = true; machst.
Musst du aber nicht. Du kannst das Dokument mit word.ActiveDocument.Save(... speichern und dan normal zum Download anbieten.

Mit word.Quit(... solltest du das Word beendet haben.

Alternativ kannt du beim start auch prüfen ob ein Word schon läuft und die Instanz dann übernehmen.
try
{
//Versuchen, bestehende Word-Instanz abzurufen
word = (Word.Application)Marshal.GetActiveObject("Word.Application");
}
catch (Exception ex)
{
//Exception tritt auf, wenn keine Instanz von Word vorhanden
}

Hoffe es hilft einwenig weiter. Code wird aber schnell umfangreich.

Ach ja. Das ist eine Webanwendung. Dann musst du dann noch eventuel das Synchronisiren beachten. Web ist ja Multithreadet, oder so ähnlich.
06.11.2009
GENiALi 2,5k 1 2 8

Stelle deine .net-Frage jetzt!
TOP TECHNOLOGIES CONSULTING GmbH