Entfernen eines Dokumentteils aus einem Paket
In diesem Thema wird gezeigt, wie Sie die Klassen im Open XML SDK für Office verwenden, um einen Dokumentteil (Eine Datei) programmgesteuert aus einem Wordprocessing-Dokument zu entfernen.
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.
Abrufen eines WordprocessingDocument-Objekts
Das Codebeispiel beginnt mit dem Öffnen einer Paketdatei, indem ein Dateiname als Argument an eine der überladenen Open() -Methoden des DocumentFormat.OpenXml.Packaging.WordprocessingDocument übergeben wird, die eine Zeichenfolge und einen booleschen Wert akzeptiert, der angibt, ob die Datei im Lese-/Schreibmodus geöffnet werden soll oder nicht. In diesem Fall ist der boolesche Wert auf true festgelegt, womit angegeben wird, dass die Datei im Lese-/Schreibmodus geöffnet werden soll.
// Open a Wordprocessing document for editing.
using (WordprocessingDocument wordDoc = WordprocessingDocument.Open(document, true))
{
// Insert other code here.
}
Die using-Anweisung stellt eine empfohlene Alternative zu der üblichen Sequenz „.Create, .Save, .Close“ dar. Mit dieser wird sichergestellt, dass die Dispose-Methode (interne vom Open XML SDK zum Bereinigen von Ressourcen verwendete Methode) automatisch aufgerufen wird, wenn die schließende Klammer erreicht ist. Der Block, der auf die using-Anweisung folgt, legt einen Bereich für das Objekt fest, das in der using-Anweisung erstellt oder benannt wird, in diesem Fall wordDoc. Da die WordprocessingDocument-Klasse im Open XML SDK das Objekt automatisch als Teil seiner System.IDisposable-Implementierung speichert und schließt und da die Dispose-Methode beim Verlassen des Blocks automatisch aufgerufen wird, müssen Sie Save und Close nicht explizit aufrufen, solange Sie using verwenden.
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.
Einstellungselement
Der folgende Text aus der SPEZIFIKATION ISO/IEC 29500 führt das Einstellungselement in einem PresentationML-Paket ein.
Dieses Element gibt die Einstellungen an, die auf ein WordprocessingML-Dokument angewendet werden. Dieses Element ist das Stammelement des Teils "Dokumenteinstellungen" in einem WordprocessingML-Dokument.
Beispiel: Betrachten Sie das folgende WordprocessingML-Fragment für den Einstellungsteil eines Dokuments:
<w:settings>
<w:defaultTabStop w:val="720" />
<w:characterSpacingControl w:val="dontCompress" />
</w:settings>
Das settings-Element enthält alle Einstellungen für dieses Dokument. In diesem Fall werden die folgenden beiden Einstellungen angewendet: automatische Tabstoppeinheiten von 0,5 Zoll mithilfe des defaultTabStop-Elements und keine Leerzeichenkomprimierung auf Buchstabenebene mithilfe des characterSpacingControl-Elements.
© ISO/IEC29500: 2008.
Funktionsweise des Beispielcodes
Nachdem Sie das Dokument in der using-Anweisung als WordprocessingDocument-Objekt geöffnet haben, erstellen Sie einen Verweis auf den DocumentSettingsPart-Teil . Sie können dann überprüfen, ob dieser Teil vorhanden ist. Wenn ja, können Sie diesen Teil aus dem Paket löschen. In diesem instance wird der settings.xml Teil aus dem Paket entfernt.
MainDocumentPart mainPart = wordDoc.MainDocumentPart;
if (mainPart.DocumentSettingsPart != null)
{
mainPart.DeletePart(mainPart.DocumentSettingsPart);
}
Beispielcode
Mit dem folgenden Code wird ein Dokumentteil aus einem Paket entfernt. Um das Programm auszuführen, rufen Sie wie in diesem Beispiel die Methode RemovePart auf.
string document = @"C:\Users\Public\Documents\MyPkg6.docx";
RemovePart(document);
Hinweis
Öffnen Sie beispielsweise vor dem Ausführen des Programms in der Testdatei "MyPkg6.docs" die Datei mit dem Open XML SDK Productivity Tool für Microsoft Office, und untersuchen Sie ihre Struktur. Nachdem Sie das Programm ausgeführt haben, überprüfen Sie die Datei erneut, und Sie werden feststellen, dass der DocumentSettingsPart-Teil entfernt wurde.
Nachstehend ist der vollständige Beispielcode in C# und Visual Basic aufgeführt.
using DocumentFormat.OpenXml.Packaging;
RemovePart(args[0]);
// To remove a document part from a package.
static void RemovePart(string document)
{
using (WordprocessingDocument wordDoc = WordprocessingDocument.Open(document, true))
{
MainDocumentPart? mainPart = wordDoc.MainDocumentPart;
if (mainPart is not null && mainPart.DocumentSettingsPart is not null)
{
mainPart.DeletePart(mainPart.DocumentSettingsPart);
}
}
}