Öffnen und Hinzufügen von Text zu einem Textverarbeitungsdokument
In diesem Thema wird gezeigt, wie Sie die Klassen im Open XML SDK für Office verwenden, um ein Word Verarbeitungsdokument programmgesteuert zu öffnen und Text hinzuzufügen.
Öffnen eines Dokuments und Hinzufügen von Text
Mit dem Open XML SDK können Sie Word Dokumentstruktur und -inhalte mithilfe stark typisierter Klassen erstellen, die Elementen entsprechenWordprocessingML
. In diesem Thema wird gezeigt, wie Sie die Klassen im Open XML SDK verwenden, um ein Word Dokument zu öffnen und diesem Text hinzuzufügen. Darüber hinaus werden in diesem Thema die grundlegende Dokumentstruktur eines WordprocessingML
Dokuments, die zugehörigen XML-Elemente und die entsprechenden Open XML SDK-Klassen vorgestellt.
Erstellen eines WordprocessingDocument-Objekts
Im Open XML SDK stellt die WordprocessingDocument -Klasse ein Word-Dokumentpaket dar. Um ein Word Dokument zu öffnen und damit zu arbeiten, erstellen Sie eine instance der WordprocessingDocument -Klasse aus dem Dokument. Wenn Sie die Instanz anhand des Dokuments erstellen, können Sie Zugriff auf den Hauptdokumentteil erhalten, der den Text des Dokuments enthält. Der Text im Standard Dokumentteils wird im Paket mithilfe von WordprocessingML
Markup als XML dargestellt.
Um die Klasse instance aus dem Dokument zu erstellen, rufen Sie eine der Open
Methoden auf. Es werden mehrere Methoden bereitgestellt, jede mit einer anderen Signatur. Der Beispielcode in diesem Thema verwendet die Open(String, Boolean) -Methode mit einer Signatur, die zwei Parameter erfordert. Der erste Parameter erfordert eine vollständige Pfadzeichenfolge, die das Dokument darstellt, das Sie öffnen möchten. Der zweite Parameter ist oder true
false
und gibt an, ob die Datei zur Bearbeitung geöffnet werden soll. Änderungen, die Sie am Dokument vornehmen, werden nicht gespeichert, wenn dieser Parameter ist false
.
Im folgenden Codebeispiel wird die Open
-Methode aufgerufen.
// Open a WordprocessingDocument for editing using the filepath.
using (WordprocessingDocument wordprocessingDocument = WordprocessingDocument.Open(filepath, true))
{
if (wordprocessingDocument is null)
{
throw new ArgumentNullException(nameof(wordprocessingDocument));
}
Nach Öffnen des Word-Dokumentpakets können Sie dem Hauptdokumentteil Text hinzufügen. Um auf den Text des Standard Dokumentteils zuzugreifen, erstellen Sie alle fehlenden Elemente, und weisen Sie einen Verweis auf den Dokumenttext zu, wie im folgenden Codebeispiel gezeigt.
// Assign a reference to the existing document body.
MainDocumentPart mainDocumentPart = wordprocessingDocument.MainDocumentPart ?? wordprocessingDocument.AddMainDocumentPart();
mainDocumentPart.Document ??= new Document();
mainDocumentPart.Document.Body ??= mainDocumentPart.Document.AppendChild(new Body());
Body body = wordprocessingDocument.MainDocumentPart!.Document!.Body!;
Struktur eines WordProcessingML-Dokuments
Die grundlegende Dokumentstruktur eines WordProcessingML
Dokuments besteht aus den document
Elementen und body
gefolgt von einem oder mehreren Elementen auf Blockebene, z p
. B. , die einen Absatz darstellen. Ein Absatz enthält mindestens ein r
Element. Steht r
für "run", bei dem es sich um einen Textbereich mit einem gemeinsamen Satz von Eigenschaften handelt, z. B. formatierung. Eine Ausführung enthält mindestens ein t
Element. Das t
-Element enthält einen Textbereich. Das folgende Codebeispiel zeigt das WordprocessingML
Markup für ein Dokument, das den Text "Beispieltext" enthält.
<w:document xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main">
<w:body>
<w:p>
<w:r>
<w:t>Example text.</w:t>
</w:r>
</w:p>
</w:body>
</w:document>
Mit dem Open XML SDK können Sie Dokumentstrukturen und -inhalte mithilfe stark typisierter Klassen erstellen, die Elementen entsprechen WordprocessingML
. Sie finden diese Klassen im -Namespace. In der folgenden Tabelle sind die Klassennamen der Klassen aufgeführt, die den document
Elementen , body
, p
, r
und t
entsprechen.
WordprocessingML-Element | Open XML SDK-Klasse | Beschreibung |
---|---|---|
<document/> |
Document | Das Stammelement des Hauptdokumentteils. |
<body/> |
Body | Der Container für die Strukturen auf Blockebene, z. B. Absätze, Tabellen, Anmerkungen und andere, die in der Spezifikation ISO/IEC 29500 angegeben sind. |
<p/> |
Paragraph | Ein Absatz. |
<r/> |
Run | Ein Lauf. |
<t/> |
Text | Ein Textbereich. |
Weitere Informationen zur Gesamtstruktur der Teile und Elemente eines WordprocessingML-Dokuments finden Sie unter Struktur eines WordprocessingML-Dokuments.
Generieren des WordprocessingML-Markups zum Hinzufügen von Text
Wenn Sie Zugriff auf den Text des Standard Dokumentteils haben, fügen Sie Text hinzu, indem Sie Instanzen der ParagraphKlassen , Runund Text hinzufügen. Dadurch wird das erforderliche WordprocessingML-Markup generiert. Im folgenden Codebeispiel wird der Absatz hinzugefügt.
// Add new text.
Paragraph para = body.AppendChild(new Paragraph());
Run run = para.AppendChild(new Run());
run.AppendChild(new Text(txt));
Beispielcode
Die hier gezeigte Beispielmethode OpenAndAddTextToWordDocument
kann zum Öffnen eines Word Dokuments und zum Anfügen von Text mithilfe des Open XML SDK verwendet werden. Übergeben Sie zum Aufrufen dieser Methode einen vollständigen Pfad- und Dateinamen als ersten Parameter und den hinzuzufügenden Text als zweiten Parameter.
string file = args[0];
string txt = args[1];
OpenAndAddTextToWordDocument(args[0], args[1]);
Nachstehend ist der vollständige Beispielcode in C# und Visual Basic aufgeführt.
Beachten Sie, dass die OpenAndAddTextToWordDocument
-Methode keinen expliziten Aufruf von Save
enthält. Dies liegt daran, dass das AutoSpeichern-Feature standardmäßig aktiviert ist und im Aufruf der Open
-Methode mithilfe von OpenSettings
nicht deaktiviert wurde.
using DocumentFormat.OpenXml.Packaging;
using DocumentFormat.OpenXml.Wordprocessing;
using System;
static void OpenAndAddTextToWordDocument(string filepath, string txt)
{
// Open a WordprocessingDocument for editing using the filepath.
using (WordprocessingDocument wordprocessingDocument = WordprocessingDocument.Open(filepath, true))
{
if (wordprocessingDocument is null)
{
throw new ArgumentNullException(nameof(wordprocessingDocument));
}
// Assign a reference to the existing document body.
MainDocumentPart mainDocumentPart = wordprocessingDocument.MainDocumentPart ?? wordprocessingDocument.AddMainDocumentPart();
mainDocumentPart.Document ??= new Document();
mainDocumentPart.Document.Body ??= mainDocumentPart.Document.AppendChild(new Body());
Body body = wordprocessingDocument.MainDocumentPart!.Document!.Body!;
// Add new text.
Paragraph para = body.AppendChild(new Paragraph());
Run run = para.AppendChild(new Run());
run.AppendChild(new Text(txt));
}
}