Frage

Offensichtlich ist der richtige Weg für unsere App ein Word-Dokument auf Basis einer Vorlage zu erzeugen, ist die Admin-Benutzer zu ermutigen, zum Einbetten der richtigen Druckfelder oder Lesezeichen im Vorlagedokument (die nach den Vorlagen aussehen wird).

Doch in der Vergangenheit haben wir unsere typischen Admin-Benutzer gefunden haben, der normalerweise nicht verwendet MailMerge oder einen der anderen „fortgeschrittenen“ Funktionen in Word erheblich, indem er auf den Einsatz Druckfelder aufschieben wird. Wir haben versucht, es für sie zu tun, Dokumentation produziert, viele Screenshots etc. Aber es ist alles „fummelig“ für sie.

Sie haben Dutzende von Vorlagen (alle nur verschiedene Arten von wirklich einfachen Buchstaben), und wollen, dass sie einigermaßen häufig ändern.

Was sie würde wirklich gerne mit einem einfachen Trennzeichen wie eine geschweifte Klammer, um nur Markenfelder der Lage sein, die effektiv Marken ein selbstgemachtes Druckfeld zu unseren App (obwohl Wort seiner Bedeutung nicht bewusst ist), wie in:

  

Sehr geehrte {CustomerSurname}

Dann können wir nur das Feld holen (n) mit mehreren Zeilen Code wie in:

w = New Word.Application
d = w.Documents.Open(...)
Dim mergedContent As String = d.Content.Text
mergedContent = mergedContent.Replace("{CustomerSurname}", Customer.Surname)
mergedContent = mergedContent.Replace("{CustomerPostcode}", Customer.Postcode)
d.Content.Text = mergedContent

Das fühlt sich roh, aber schön einfach (für den Endverbraucher).

Hat jemand unten auf dieser Strecke gegangen? Alles, was falsch? Wir raten sie nicht die „{“ und „}“ Zeichen an anderer Stelle im normalen Text des Dokuments zu verwenden, aber das ist nicht wirklich eine erhebliche Einschränkung.

Geschwindigkeit? Wickeln des Druckfeld über zwei Linien? Andere Probleme?

War es hilfreich?

Lösung

Dies ist ein Teil meines Codes, die ich verwenden zu finden und zu ersetzen. Ich habe versucht, den Code zuerst, aber das hat nicht funktioniert. Dies basiert auf dem VBA-Code, dass Word erzeugt, wenn Sie einen Makro aufzeichnen.

range = document.Range()

With range.Find
 .Text = "{" & name & "}"
 .Replacement.Text = NewValueHere
 .Forward = True
 .Wrap = Word.WdFindWrap.wdFindContinue
 .Format = False
 .MatchCase = True
 .MatchWholeWord = False
 .MatchWildcards = False
 .MatchSoundsLike = False
 .MatchAllWordForms = False
End With
range.Find.Execute(Replace:=Word.WdReplace.wdReplaceAll)

habe ich diesen Code, weil die Dokumente kompatibel sein mußten mit den binären Office-Dateiformaten. Wenn Sie das Office 2007-Format verwenden können, brauchen Sie nicht zu haben, Word installiert. Entpacken Sie einfach das Dokument, finden Sie das Wort \ document.xml Datei, führen Sie eine String.Replace("[OldValue]", "New value"), speichern Sie die Datei und zip es zurück zu einem Paket (docx-Datei). Der Code, den ich hier angezeigt ist ziemlich langsam, weil ich Wort bin automatisieren. Word-Öffnen, Bearbeiten 2 Dokumente mit 6 Feldern und Schließen der App dauert 4 Sekunden auf meinem PC.

Andere Tipps

Was passiert, wenn die Benutzer geschweiften Klammern verwenden wollen? Ich denke, Sie sollten einen Weg, um sich zum Beispiel /{/} zu entkommen oder {{}} usw.

Sie müssen sicherstellen, dass Ihre ersetzen Logik Groß- und Kleinschreibung zum Beispiel ist sowohl {CustomerSurname} und {} Customersurname sollte das gleiche Feld darstellen darf. Kann auch optional erlauben Leerzeichen zwischen den Wörtern wie {Kunden Nachname}.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top