Hinzufügen eines neuen Dokumentteils, der eine Beziehungs-ID für ein Paket empfängt

In diesem Thema wird gezeigt, wie Sie die Klassen im Open XML SDK für Office verwenden, um einen Dokumentteil (Datei) hinzuzufügen, der einen Beziehungs-ID-Parameter für ein Textverarbeitungsdokument empfängt.


Pakete und Dokumentteile

Ein Open XML-Dokument wird als Paket gespeichert, dessen Format durch die Spezifikation ISO/IEC 29500-2 definiert ist. 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.


Struktur eines WordProcessingML-Dokuments

Die grundlegende Struktur eines WordProcessingML-Dokuments besteht aus den document- und body-Elementen, gefolgt von einem oder mehreren Block-Level-Elementen wie p, das für einen Absatz steht. Ein Absatz enthält ein oder mehrere r-Elemente. r steht für ausführen und meint einen Textbereich mit gemeinsamen Eigenschaften wie Formatierung. Eine Ausführung besteht aus einem oder mehreren t-Elementen. 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="https://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 mit stark typisierten Klassen erstellen, die WordprocessingML-Elementen entsprechen. Diese Klassen sind im DocumentFormat.OpenXml.Wordprocessing -Namespace enthalten. Die folgende Tabelle enthält die Namen der Klassen, die den Elementen document, body, p, r und t entsprechen.

WordprocessingML-Element Open XML SDK-Klasse Beschreibung
document Document Das Stammelement des Hauptdokumentteils.
Text 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

Der folgende Code fügt einen neuen Dokumentteil hinzu, der benutzerdefiniertes XML aus einer externen Datei enthält, und füllt dann den Dokumentteil auf. Sie können die AddNewPart-Methode aufrufen, indem Sie einen Aufruf wie im folgenden Codebeispiel verwenden.

    string document = @"C:\Users\Public\Documents\MyPkg1.docx";
    AddNewPart(document);

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


using DocumentFormat.OpenXml;
using DocumentFormat.OpenXml.Packaging;
using DocumentFormat.OpenXml.Wordprocessing;
using System.IO;
using System.Xml;


static void AddNewPart(string document)
{
    // Create a new word processing document.
    WordprocessingDocument wordDoc =
       WordprocessingDocument.Create(document,
       WordprocessingDocumentType.Document);

    // Add the MainDocumentPart part in the new word processing document.
    var mainDocPart = wordDoc.AddNewPart<MainDocumentPart>
("application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml", "rId1");
    mainDocPart.Document = new Document();

    // Add the CustomFilePropertiesPart part in the new word processing document.
    var customFilePropPart = wordDoc.AddCustomFilePropertiesPart();
    customFilePropPart.Properties = new DocumentFormat.OpenXml.CustomProperties.Properties();

    // Add the CoreFilePropertiesPart part in the new word processing document.
    var coreFilePropPart = wordDoc.AddCoreFilePropertiesPart();
    using (XmlTextWriter writer = new
XmlTextWriter(coreFilePropPart.GetStream(FileMode.Create), System.Text.Encoding.UTF8))
    {
        writer.WriteRaw("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n<cp:coreProperties xmlns:cp=\"https://schemas.openxmlformats.org/package/2006/metadata/core-properties\"></cp:coreProperties>");
        writer.Flush();
    }

    // Add the DigitalSignatureOriginPart part in the new word processing document.
    wordDoc.AddNewPart<DigitalSignatureOriginPart>("rId4");

    // Add the ExtendedFilePropertiesPart part in the new word processing document.
    var extendedFilePropPart = wordDoc.AddNewPart<ExtendedFilePropertiesPart>("rId5");
    extendedFilePropPart.Properties =
new DocumentFormat.OpenXml.ExtendedProperties.Properties();

    // Add the ThumbnailPart part in the new word processing document.
    wordDoc.AddNewPart<ThumbnailPart>("image/jpeg", "rId6");

    wordDoc.Dispose();
}

Siehe auch