OpenXML ersetzt Text in allen Dokumenten

8

Ich habe den Code unten. Ich möchte den Text "Text1" durch "NewText" ersetzen, das ist Arbeit. Aber wenn ich den Text "Text1" in eine Tabelle setze, die für den "Text1" in der Tabelle nicht mehr funktioniert.

Ich möchte diesen Ersatz im gesamten Dokument machen.

%Vor%     
Kris-I 30.09.2013, 12:32
quelle

3 Antworten

14

Ihr Code funktioniert nicht, weil das Tabellenelement ( w:tbl ) nicht enthalten ist ein Absatzelement ( w:p ). Weitere Informationen finden Sie im folgenden Artikel MSDN .

Die Klasse Text (serialisiert als w:t ) repräsentiert normalerweise den Text innerhalb eines Run Elements in a Word-Datei. So könntest du einfach nach allen w:t elements ( Text class) suchen und deine ersetzen Tag, wenn das Textelement ( w:t ) Ihr Tag enthält:

%Vor%     
Hans 30.09.2013, 17:23
quelle
7

Entlehnen Sie einige andere Antworten an verschiedenen Orten und mit der Tatsache, dass vier Haupthindernisse überwunden werden müssen:

  1. Löschen Sie alle High-Level-Unicode-Zeichen aus Ihrer Ersetzungszeichenfolge, die nicht aus Word gelesen werden können (aus fehlerhaften Benutzereingaben)
  2. Möglichkeit, in mehreren Durchläufen oder Textelementen innerhalb eines Absatzes nach dem Suchergebnis zu suchen (Word zerlegt häufig einen einzelnen Satz in mehrere Textläufe)
  3. Möglichkeit, einen Zeilenumbruch in den Ersetzungstext einzufügen, um mehrzeiligen Text in das Dokument einzufügen.
  4. Möglichkeit, einen beliebigen Knoten als Ausgangspunkt für Ihre Suche zu übergeben, um die Suche auf diesen Teil des Dokuments zu beschränken (z. B. den Hauptteil, die Kopfzeile, die Fußzeile, eine bestimmte Tabelle, Tabellenzeile oder Tabellenzelle) .

Ich bin mir sicher, dass erweiterte Szenarios wie Lesezeichen, komplexe Verschachtelung, mehr Modifikationen benötigen, aber es funktioniert für die Arten von grundlegenden Word-Dokumenten, die ich bisher kennengelernt habe, und ist viel hilfreicher für mich, als Läufe ganz zu ignorieren oder Verwenden einer RegEx für die gesamte Datei ohne die Möglichkeit, einen bestimmten TableCell- oder Dokumentteil zu adressieren (für erweiterte Szenarien).

Beispielverwendung:

%Vor%

Der Code:

%Vor%     
Amos Zoellner 27.04.2015 20:01
quelle
3

Vielleicht ist diese Lösung einfacher

%Vor%     
Emanuele Greco 17.06.2014 08:26
quelle

Tags und Links