Word - Suchen von Begriffen in {}-Klammern

  • VB.NET

Es gibt 32 Antworten in diesem Thema. Der letzte Beitrag () ist von INOPIAE.

    Word - Suchen von Begriffen in {}-Klammern

    Moin!

    ich habe ein Dokument mit einer Vielzahl von Platzhaltern.



    Nun möchte ich eine Auflistung aller Begriffe in den {}-Klammern erhalten.

    Hat einer eine Idee, wie man das machen könnte?

    ... oder muss man den gesamten Text in eine Variable kopieren und dann mit RegEx (dann gleich die Frage wie?) suchen?

    Gruß Jan
    Hi,

    mit Regex geht dies optimal.

    VB.NET-Quellcode

    1. Dim Test As String = "Dies {ist} ein {test}"
    2. Dim Pattern As New Text.RegularExpressions.Regex("{([\s\S]*?)}", RegexOptions.Singleline)
    3. For Each m As Text.RegularExpressions.Match In Pattern.Matches(Test)
    4. MessageBox.Show(m.Value)
    5. 'Optional: MessageBox.Show(m.Value.Replace("{", "").Replace("}", ""))
    6. Next


    Meine Website:
    www.renebischof.de

    Meine erste App (Android):
    PartyPalooza
    Was sind das für Elemente in den Klammern?
    • Einfache Platzhalter, die später durch mit Suchen/Ersetzen befüllt werden
    • Felder
    • Serienbrieffelder

    Für Felder hier ein VBA Ansatz

    Visual Basic-Quellcode

    1. ​Dim fieldLoop As Field
    2. For Each fieldLoop In ActiveDocument.Fields
    3. MsgBox Chr(34) & fieldLoop.Code.Text & Chr(34)
    4. Next fieldLoop
    NB. Es ist doch schön, wenn man lesbare Namen vergibt. Siehe auch [VB.NET] Beispiele für guten und schlechten Code (Stil).
    Moin!

    Vollzitat des direkten Vorposts an dieser Stelle entfernt ~VaporiZed

    Es handelt sich um einfache Texte die einfach vom Anwender bearbeitet werden können. Hier ist diese Mischbearbeiung erforderlich.

    Was mir derzeit nur etwas Kopfzerbrechen macht ist die Tatsache, wie ich den Word-Text in eine Variable für

    VB.NET-Quellcode

    1. Dim Test As String = "Dies {ist} ein {test}"


    bekomme.

    Jan

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „VaporiZed“ ()

    jan99 schrieb:

    wie ich den Word-Text in eine Variable für
    Keine Variable, sondern einfach diesen Text hineinkopieren.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Dann war Deine Formulierung in Post #4 wohl nicht eindeutig genug. :/
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    vielleicht nochmal auf post#3 eingehen.
    Es scheint hier ja um die Serienbrief-Funktion (oder was ähnliches) von Word zu gehen.
    Da muss man mit Com-InterOp rumfuchteln bzw mit VBA.
    Genaueres weissiich aber nicht - zu lange her.

    jdfs. post#4 ergibt imo nicht viel Sinn. Was ist "Mischbearbeitung"?
    ansonsten bezieht sich post#4 ja auf post#2 - was aber hier ein ganz unbrauchbarer Ansatz ist.
    Es geht hier ja wie gesagt nicht um String-Verarbeitung in vb.net, sondern ums Einsetzen von Werten in Word-Formular-Felder (per vba oder com-Interop)
    Mir stellt sich erstmal die Frage, was das endgültige Ziel des Ganzen ist. Bisher heißt es ja nur in Post#1: Alle Klammerbegriffe im Dokument erfassen und in VB.NET zugänglich zu machen. Das wäre als Ergebnis also z.B.

    Quellcode

    1. {Anrede}
    2. {DatumUrBescheid}
    Wenn das aber nicht das eigentliche Ziel ist, sondern nur ein gedanklicher Schritt auf dem Weg zu einem anderen Ziel, wäre weiteres Spekulatiusbacken überflüssig. Daher: Was ist das zu lösende Problem bzw. das angestrebte Ziel des zu erstellenden Gesamtcodes?
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Es gibt unzählige NuGet-Pakete, oder benutzt eben Microsoft.Office.Interop.Word direkt.
    Damit kannste die ganze Word-Datei lesen und dann z.B.(!) via RegEx parsen.


    Meine Website:
    www.renebischof.de

    Meine erste App (Android):
    PartyPalooza
    Moin!
    das mit der Bedeutung zu #3 hatte ich doch geschrieben, dass es sich um einfachen Text handelt der die textlichen Platzhalter in {}-Klammern fasst.

    Das aus #4 bezieht sich auf den Mustercode von xored bei dem eine Variable Text ausgewertet wird. In dem Beispiel wurde direkt ein Text zugewiesen. Deshalb meine Frage, wie ich den textlichen Inhalt aus dem Word-Dokument in diese Variable bekomme.

    @xored - Du schreibst schon den Hinweis

    der benutzt eben Microsoft.Office.Interop.Word direkt.
    Damit kannste die ganze Word-Datei lesen


    .... und das ist genau eine Frage - wie kann ich die ganze Word-Datei lesen.

    Bei Nuget meinst du vermucht etwas wie support.syncfusion.com/kb/arti…word-document-in-c-vb-net (vb-Beispiel relativ weit unten) würde aber vielleicht bei den Boardmitteln bleiben.

    Gruß Jan

    jan99 schrieb:

    wie kann ich die ganze Word-Datei lesen.
    Wäre Dir geholfen, wenn Du das ganze im RTF-Format abwickelst?
    Da ließe sich das ganze wesentlich einfacher organisieren.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @jan99 Muss die DocX-Datei nur ausgelesen oder geändert wieder geschrieben werden?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @RodFromGermany: Tja, nach einer vollständigen Aufgabenbeschreibung hab ich ja auch schon in Post#9 gefragt. Aber es sind inzwischen so viele Threads und Fragen, die unbeantwortet bleiben … :/

    Den Rohtext erhält man mit .NET-Framework-Bordmitteln z.B. mit

    VB.NET-Quellcode

    1. Private Function GetRawTextFrom(WordDocumentPath As String) As String
    2. Dim TempZipDirectory = IO.Path.Combine(Application.StartupPath, "TempZip")
    3. IO.Directory.Delete(TempZipDirectory, True)
    4. IO.Compression.ZipFile.ExtractToDirectory(WordDocumentPath, TempZipDirectory)
    5. Dim XmlDocument As New Xml.XmlDocument()
    6. XmlDocument.Load(IO.Path.Combine(TempZipDirectory, "word\document.xml"))
    7. Return String.Join(Environment.NewLine, XmlDocument.ChildNodes.Cast(Of Xml.XmlNode).Skip(1).Select(Function(x) x.InnerText))
    8. End Function

    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

    jan99 schrieb:

    nur gelesen.
    Du kannst per Word-Applikation das gesamte Word-Dokument in die Zwischenablage kopieren und diesen Word-Inhalt als RichText in eine RichTextBox einfügen.
    Mit der .Lines-Property kannst Du Deine Ziel-Texte herausholen.
    c-sharpcorner.com/article/word…ed-rich-text-box-control/
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    tja, vlt. liefert jan99 mal eine BeispielDatei, zusammen mit der zugehörigen Ausgabe.



    Ich wunder mich aber auch über jan99's Schwierigkeiten, iwas vom bislang gegeben Code umzusetzen.
    Also eine Datei in einen String einlesen, und dann mittm post#2-Code die {...} - Teile daraus zu isolieren - sachma, Jan: Wo liegt das Problem?
    Moin!

    ich habe über das Wochenende nur erst einmal die Fragen beantwortet und werde das Morgen im Büro ausprobieren.

    Bin ganz hoffnungsvoll nach den Tipps.

    Was ich allerdings nicht verstehe ist, warum eine Beispieldatei erforderlich ist!?! Eine Datei mit den Klammern hatte ich als Bild gezeigt. Da ist nichts weiter spezielles.

    Bis morgen.

    Jan