Freigeben über


Suchen und Ersetzen von Text in einem Dokumentteil

In diesem Thema wird gezeigt, wie Sie die Klassen im Open XML SDK für Office verwenden, um einen Textwert in einem Textverarbeitungsdokument programmgesteuert zu durchsuchen und zu ersetzen.


Pakete und Dokumentteile

Ein Open XML-Dokument wird als Paket gespeichert, dessen Format durch ISO/IEC 29500 definiert wird. Das Paket kann mehrere Teile enthalten, die untereinander in Beziehung stehen. Durch die Beziehung zwischen den Teilen wird die Kategorie des Dokuments gesteuert. Ein Dokument kann als Textverarbeitungsdokument definiert sein, falls sein Paketbeziehungselement eine Beziehung zu einem Hauptdokumentteil besitzt. Falls das Paketbeziehungselement eine Beziehung zu einem Präsentationsteil hat, kann es als Präsentationsdokument definiert sein. Falls das Paketbeziehungselement eine Beziehung zu einem Arbeitsmappenteil hat, ist es als Tabellenkalkulationsdokument definiert. In diesem Thema vom Typ "Gewusst wie" wird ein Textverarbeitungsdokument-Paket verwendet.


Abrufen eines WordprocessingDocument-Objekts

Im Beispielcode öffnen Sie zunächst die Textverarbeitungsdatei, indem Sie die WordprocessingDocument -Klasse instanziieren, wie in der folgenden using Anweisung gezeigt. In derselben Anweisung öffnen Sie die Textverarbeitungsdatei document mithilfe der Open -Methode, wobei der boolesche Parameter auf true festgelegt ist, um die Bearbeitung des Dokuments zu ermöglichen.

using (WordprocessingDocument wordDoc = WordprocessingDocument.Open(document, true))

Mit v3.0.0 und höher wurde die Close() -Methode entfernt, um sich auf die using-Anweisung zu verlassen. Dadurch wird sichergestellt, dass die Dispose() -Methode automatisch aufgerufen wird, wenn die schließende Klammer erreicht ist. Der Block, der auf die using-Anweisung folgt, richtet einen Bereich für das Objekt ein, das in der using-Anweisung erstellt oder benannt wird. Da die WordprocessingDocument -Klasse im Open XML SDK das Objekt als Teil der IDisposable Implementierung automatisch speichert und schließt und da Dispose() automatisch aufgerufen wird, wenn Sie den Block beenden, müssen Sie oder Dispose() nicht explizit aufrufenSave(), solange Sie eine using -Anweisung verwenden.


Beispielcode

Im folgenden Beispiel ist eine schnelle und einfache Möglichkeit zum Suchen und Ersetzen dargestellt. Diese ist möglicherweise nicht zuverlässig, da das XML-Dokument im Zeichenfolgenformat abgerufen wird. Je nach dem regulären Ausdruck könnten Sie möglicherweise versehentlich XML-Tags ersetzen und das Dokument beschädigen. Wenn Sie einfach ein Dokument durchsuchen, aber nicht den Inhalt ersetzen möchten, können Sie verwenden MainDocumentPart.Document.InnerText.

In diesem Beispiel wird auch gezeigt, wie sie einen regulären Ausdruck verwenden, um den Textwert "Hallo Welt!" in einer Textverarbeitungsdatei durch den Wert "Hallo Alle!" zu durchsuchen und zu ersetzen. Um die -Methode SearchAndReplaceaufzurufen, können Sie das folgende Beispiel verwenden.

SearchAndReplace(args[0]);

Nach Ausführung des Programms können Sie die Datei überprüfen, um den geänderten Text "Hello world!" anzuzeigen.

Es folgt der vollständige Beispielcode in C# und Visual Basic.

static void SearchAndReplace(string document)
{
    using (WordprocessingDocument wordDoc = WordprocessingDocument.Open(document, true))
    {
        string? docText = null;


        if (wordDoc.MainDocumentPart is null)
        {
            throw new ArgumentNullException("MainDocumentPart and/or Body is null.");
        }

        using (StreamReader sr = new StreamReader(wordDoc.MainDocumentPart.GetStream()))
        {
            docText = sr.ReadToEnd();
        }

        Regex regexText = new Regex("Hello World!");
        docText = regexText.Replace(docText, "Hi Everyone!");

        using (StreamWriter sw = new StreamWriter(wordDoc.MainDocumentPart.GetStream(FileMode.Create)))
        {
            sw.Write(docText);
        }
    }
}

Siehe auch