Hallo,
ich verwende VB.NET und das .COM - Objekt "Microsoft.Office.Interop.Word".
Ich möchte in einem MS Word Dokument gezielt Wörter austauschen lassen. Dazu schreibt der User Schlüsselbegriffe in das Dokument und mein Programm soll diese dann durch Werte ersetzen.
Die Schlüsselwörter schreibt man so:
<-Vorname-> <-Nachname-> hat heute Geburtstag.
Klingt einfach, aber ich habe hier ernsthafte Schwierigkeiten. Ich habe zuerst eine Funktion geschrieben, die versucht, den gesamten Inhalt auszutauschen. Dabei geht jedoch die Formatierung des Dokuments verloren:
Private Sub Austausch(ByVal Schlüssel As String, ByVal Ersatz As String, ByVal _
Dokument As Microsoft.Office.Interop.Word.Document)
'Tauscht die im Dok enthaltenen Schlüsselwörter durch Werte aus
Dim Inhalt As String = ""
With Dokument
Inhalt = .Content.Text
.Content.Text = Replace(Inhalt, "<-" & Schlüssel & "->", Ersatz, 1, -1, _
CompareMethod.Text)
End With
End Sub Wenn jemand eine Lösung hat, die Formatirung beizubehalten, wäre das klasse.
Dann habe ich versucht, eine Funktion zu schreiben, welche Wort für Wort vergleicht und diese dann ersetzt:
Private Sub Austausch(ByVal Schlüssel As String, ByVal Ersatz As String, ByVal _
Dokument As Microsoft.Office.Interop.Word.Document)
Dim i, Wörter As Integer
For i = 1 To Wörter - 3
If .Words(i).Text = "<-" Then
If .Words(i + 1).Text.ToUpper = Schlüssel.ToUpper And i <= Wörter - 2 Then
If Microsoft.VisualBasic.Left(.Words(i + 2).Text, 2) = "->" Then
.Words(i).Text = ""
.Words(i).Text = Replace(.Words(i).Text, Schlüssel, Ersatz, 1, -1, _
CompareMethod.Text)
.Words(i + 1).Text = Replace(.Words(i + 1).Text, "->", "", 1, -1, _
CompareMethod.Text)
i += 2
End If
End If
End If
Next i Fragt mich nicht, warum ich den Index so gesetzt habe. Word springt aus mir nicht bekannten Gründen manchmal einfach ein Wort weiter, wenn eines "angefasst" wurde.
Fakt ist, dass diese Funktion unglaublich langsam ist (60 Sekunden bis ein kleines Dokument durchlaufen wurde) und außerdem nicht (mehr) funktioniert.
Ich wäre für wirklich jeden Lösungsansatz dankbar, da ich im Netz nicht auf brauchbare Beispiele gestoßen bin.
Danke im Voraus -
Gorch Vossen |