Word Dokument bearbeiten

  • VB.NET
  • .NET 4.5

Es gibt 9 Antworten in diesem Thema. Der letzte Beitrag () ist von HeizungAuf5.

    Word Dokument bearbeiten

    Neu

    Hallo zusammen,

    gibt es eine Replace-Funktion in Basic, mit der ich einen Text in einem Wort-Dokument ersetzen kann?

    Beispielsweise steht in einem Wort Dokument der Text Mein Name ist <NAME>. Dort soll <NAME> durch X ersetzt werden. Ich denke ihr wisst, was ich meine ;)

    Office und Wort ist auf den entsprechenden Rechnern installiert. Aktuell mach ich das darüber, dass mein Anwendung eine CSV exportiert und ich die per Serienbrief in Word einlese, soll aber alles etwas einfacher werden.

    Danke!

    Neu

    Ich verweise nochmal zurück auf Post#2, da das Replacing wohl innerhalb von Word verwendet werden soll. D.h. auf klassischem klassischer Weg im Visual Studio-Projekt den COM-Verweis auf Word setzen, im Code auf Word zugreifen, das Dokument öffnen und dann mithilfe des Word-Objektes das VBA-Replace aktivieren/ausführen.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Häufig von mir verwendete Abkürzungen: CEs = control elements (Labels, Buttons, DGVs, ...) und tDS (typisiertes DataSet)
    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht in den Spekulatiusmodus gehen.

    Neu

    Ich selber habs bisher nie hinbekommen es mit VB.NET-Hausmitteln zu lösen, zumindest hab cih bislang kein gutes Tutorial diesbezüglich gefunden.

    Ich verwende dafür die Spire.Doc in der Free-Version. Und im Programm dann Simpel:

    VB.NET-Quellcode

    1. Dim actualFile As New Spire.Doc.Document()
    2. actualFile.LoadFromFile(Application.StartupPath & "\Vorlage.docx") 'Pfad zum Word-Dokument
    3. actualFile.Replace("PlatzHalterImWordFile", "Neuer Text", True, True)
    If Energy = Low Then
    Drink(aHugeCoffee)
    Else
    Drink(aHugeCoffeeToo)
    End If

    Neu

    Suchen und Ersetzen mach man mit der Find.Execute-Methode (Word)

    VB.NET-Quellcode

    1. Sub Replace()
    2. Dim oWord As Word.Application = CType(System.Runtime.InteropServices.Marshal.GetActiveObject("Word.Application"), Word.Application)
    3. Dim oDoc As Word.Document = oWord.ActiveDocument
    4. oDoc.Content.Find.Execute(FindText:="<NAME>", MatchWholeWord:=True, ReplaceWith:="X", Replace:=Word.WdReplace.wdReplaceAll)
    5. End Sub

    Weitere Beispiele findest du hier:
    Suchen und Ersetzen von Text oder Formatierung

    Neu

    @HenryV aber das funktioniert soweit ich das richtig sehe nur mit einem offenen Word-Dokument oder ? Mir war damals wichtig das er die File direkt bearbeitet, ohne Sie selbst in Word zu öffnen oder dergleichen. Und die Spire.Doc funktioniert dahingehend einwandfrei =)
    If Energy = Low Then
    Drink(aHugeCoffee)
    Else
    Drink(aHugeCoffeeToo)
    End If

    Neu

    @asusdk
    Falsch, man kann Word und die Dokumente auch von vb.net öffnen lassen.
    Öffnen einer neuen Word-Instanz:

    VB.NET-Quellcode

    1. Dim oWord As Word.Application = New Word.Application

    Mit Documents.Open öffnest du ein bestehendes Dokument

    VB.NET-Quellcode

    1. Dim oDoc As Word.Document = oWord.Documents.Open("Pfad zu Dokument")

    und mit Documents.Add erstellst du ein neues leeres oder eines das auf einer Vorlage basiert.

    VB.NET-Quellcode

    1. Dim oDoc As Word.Document = oWord.Documents.Add("Pfad zur Vorlage") 'Wenn Pfad ausgelassen wird, wird die Vorlage "Normal" verwendet

    Und nebenbei öffnet Spire.Doc das Dokument auch. Aber bekanntlich führen ja mehrere Weg nach Rom.

    Neu

    Hallo zusammen,

    der Code von @HenryV hat mein Problem gelöst. Schlussendlich sieht "mein" Snippet dazu nun so aus:

    Quellcode

    1. Imports Microsoft.Office.Interop
    2. [...]
    3. Dim oWord As Word.Application = New Word.Application
    4. Dim oDoc As Word.Document = oWord.Documents.Open("PFAD")
    5. oDoc.Content.Find.Execute(FindText:="<NAME>", MatchWholeWord:=True, ReplaceWith:="Hans Huber", Replace:=Word.WdReplace.wdReplaceAll)



    Danke für eure Mühe und Geduld!