Freigeben über


Erstellen eines Pakets

In diesem Thema wird gezeigt, wie Sie die Klassen im Open XML SDK für Office verwenden, um programmgesteuert ein Textverarbeitungsdokumentpaket aus Inhalten in Form von WordprocessingML XML-Markup zu erstellen.

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 Open XML SDK stellt die WordprocessingDocument -Klasse ein Word-Dokumentpaket dar. Um ein Word Dokument zu erstellen, erstellen Sie eine instance der WordprocessingDocument -Klasse und füllen sie mit Teilen auf. Das Dokument muss mindestens einen Hauptdokumentteil aufweisen, der als Container für den Haupttext des Dokuments dient. Der Text wird im Paket mithilfe von WordprocessingML Markup als XML dargestellt.

Zum Erstellen der Klasse instance rufen Sie aufCreate(String, WordprocessingDocumentType). Es werden mehrere Create Methoden mit jeweils unterschiedlicher Signatur bereitgestellt. Der erste Parameter erfordert eine vollständige Pfadzeichenfolge, die das Dokument darstellt, das Sie erstellen möchten. Der zweite Parameter ist ein Member der WordprocessingDocumentType Enumeration. Dieser Parameter steht für den Typ des Dokuments. Es gibt z. B. ein anderes Element der WordprocessingDocumentType Enumeration für jedes Dokument, jede Vorlage und das Makro, das eine Vielzahl von Dokumenten und Vorlagen aktiviert hat.

Hinweis

Wählen Sie sorgfältig das entsprechende WordprocessingDocumentType aus, und vergewissern Sie sich, dass die persistente Datei über die richtige, übereinstimmende Dateierweiterung verfügt. Wenn die WordprocessingDocumentType nicht mit der Dateierweiterung übereinstimmt, tritt beim Öffnen der Datei in Microsoft Word ein Fehler auf.

using (WordprocessingDocument wordDoc = WordprocessingDocument.Create(document, WordprocessingDocumentType.Document))

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.

Sobald Sie das Word-Dokumentpaket erstellt haben, können Sie ihm Teile hinzufügen. Zum Hinzufügen des Standard Dokumentteils rufen Sie aufAddMainDocumentPart. Im Anschluss können Sie die Dokumentstruktur und Text hinzufügen.

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 documentElementen , body, p, rund 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.

Beispielcode

Im Folgenden finden Sie das vollständige Codebeispiel, mit dem Sie ein Open XML-Textverarbeitungsdokumentpaket aus XML-Inhalten in Form von WordprocessingML Markup erstellen können.

Nachdem Sie das Programm ausgeführt haben, öffnen Sie die erstellte Datei, und untersuchen Sie ihren Inhalt. es sollte ein Absatz sein, der den Ausdruck "Hello Welt!" enthält.

Nachstehend ist der vollständige Beispielcode in C# und Visual Basic aufgeführt.

// To create a new package as a Word document.
static void CreateNewWordDocument(string document)
{
    using (WordprocessingDocument wordDoc = WordprocessingDocument.Create(document, WordprocessingDocumentType.Document))
    {
        // Set the content of the document so that Word can open it.
        MainDocumentPart mainPart = wordDoc.AddMainDocumentPart();

        SetMainDocumentContent(mainPart);
    }
}

// Set the content of MainDocumentPart.
static void SetMainDocumentContent(MainDocumentPart part)
{
    const string docXml = @"<?xml version=""1.0"" encoding=""utf-8""?>
                            <w:document xmlns:w=""http://schemas.openxmlformats.org/wordprocessingml/2006/main"">
                              <w:body>
                                <w:p>
                                  <w:r>
                                    <w:t>Hello World</w:t>
                                  </w:r>
                                </w:p>
                              </w:body>
                            </w:document>";

    using (Stream stream = part.GetStream())
    {
        byte[] buf = (new UTF8Encoding()).GetBytes(docXml);
        stream.Write(buf, 0, buf.Length);
    }
}

Siehe auch