Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
In diesem Thema wird gezeigt, wie Sie die Klassen im Open XML SDK für Office verwenden, um ausgeblendeten Text programmgesteuert aus einem Textverarbeitungsdokument zu entfernen.
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 DocumentFormat.OpenXml.Wordprocessing -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.
Struktur des vanish-Elements
Das vanish
-Element spielt eine wichtige Rolle beim Ausblenden des Texts in einer Word-Datei. Die Hidden
Formatierungseigenschaft ist eine Umschalteigenschaft, was bedeutet, dass sich ihr Verhalten zwischen der Verwendung innerhalb einer Formatvorlagendefinition und der Verwendung als direkte Formatierung unterscheidet. Wenn sie als Teil einer Formatdefinition verwendet wird, wird durch Festlegen dieser Eigenschaft der aktuelle Status umgeschaltet.
Wenn Sie sie auf false
(oder eine entsprechende Einstellung) festlegen, bleibt die aktuelle Einstellung unverändert. Wenn sie jedoch als direkte Formatierung verwendet wird, wird der absolute Zustand der resultierenden Eigenschaft auf true
oder false
festgelegt.
Die folgenden Informationen aus der SPEZIFIKATION ISO/IEC 29500 stellen das Element vor vanish
.
vanish (Ausgeblendeter Text)
Mit diesem Element wird festgelegt, ob die Inhalte dieses Laufs zur Anzeigezeit in einem Dokument ausgeblendet werden. [Hinweis: Die Einstellung sollte Auswirkungen auf die normale Anzeige des Texts haben, eine Anwendung kann jedoch auch über Einstellungen verfügen, in denen die Anzeige von ausgeblendetem Text erzwungen wird. Ende des Hinweises]
Diese Formatierungseigenschaft ist eine Umschalteigenschaft (§17.7.3).
Wenn dieses Element nicht vorhanden ist, ist der Standardwert, dass die Formatierung auf der vorherigen Ebene in der Formathierarchie angewendet wird. Wenn dieses Element nie in der Formathierarchie angewendet wird, darf dieser Text nicht ausgeblendet werden, wenn er in einem Dokument angezeigt wird.
[Beispiel: Stellen Sie sich einen Textlauf vor, in dem die Eigenschaft für ausgeblendeten Text für die Inhalte des Laufs festgelegt sein soll. Diese Einschränkung wird mithilfe des folgenden WordprocessingML-Markups angegeben:
<w:rPr>
<w:vanish />
</w:rPr>
Dieser Lauf deklariert, dass die vanish-Eigenschaft für die Inhalte dieses Laufs festgelegt sein soll, daher werden die Inhalte dieses Laufs ausgeblendet, wenn die Dokumentinhalte angezeigt werden. Ende des Beispiels]
© ISO/IEC 29500: 2016
Das folgende XML-Schemasegment definiert den Inhalt dieses Elements.
<complexType name="CT_OnOff">
<attribute name="val" type="ST_OnOff"/>
</complexType>
Die val
-Eigenschaft im obigen Code ist ein binärwert, der aktiviert oder deaktiviert werden kann. Wenn der Wert on
, 1
oder angegeben ist, true
ist die -Eigenschaft aktiviert. Wenn der Wert off
, 0
oder false
angegeben ist, ist die -Eigenschaft deaktiviert.
Funktionsweise des Codes
Die WDDeleteHiddenText
-Methode funktioniert mit dem von Ihnen angegebenen Dokument, entfernt alle run
ausgeblendeten Elemente und entfernt zusätzliche vanish
Elemente. Der Code beginnt mit dem Öffnen des Dokuments mit der Open -Methode und gibt an, dass das Dokument für Lese-/Schreibzugriff geöffnet werden soll (der endgültige True-Parameter). Angesichts des geöffneten Dokuments verwendet der Code die MainDocumentPart -Eigenschaft, um zum Standard Dokument zu navigieren und den Verweis in einer Variablen zu speichern.
using (WordprocessingDocument doc = WordprocessingDocument.Open(docName, true))
{
Abrufen einer Liste von Vanish-Elementen
Der Code überprüft zunächst, ob doc.MainDocumentPart
und doc.MainDocumentPart.Document.Body
nicht NULL sind, und löst eine Ausnahme aus, wenn eine fehlt. Verwendet dann die Übergabe Vanish des Descendants() Typs, um eine IEnumerable
der Vanish
Elemente abzurufen, und wandelt sie in eine Liste um.
if (doc.MainDocumentPart is null || doc.MainDocumentPart.Document.Body is null)
{
throw new ArgumentNullException("MainDocumentPart and/or Body is null.");
}
// Get a list of all the Vanish elements
List<Vanish> vanishes = doc.MainDocumentPart.Document.Body.Descendants<Vanish>().ToList();
Entfernen von Ausführungen mit ausgeblendetem Text und zusätzlichen Vanish-Elementen
Um den ausgeblendeten Text zu entfernen, durchlaufen wir als Nächstes die List
der Vanish
-Elemente. Das Vanish
Element ist ein untergeordnetes Element von, RunProperties kann aber RunProperties
ein untergeordnetes Element eines oder xref Run :DocumentFormat.OpenXml.Wordprocessing.ParagraphProperties> sein, sodass wir die übergeordneten und übergeordneten Elemente jedes Elements Vanish
abrufen und dessen Typ überprüfen. Wenn der Großelternteil ein Run
ist, entfernen wir diese Ausführung, und wenn nicht, entfernen wir die Vanish
untergeordneten Elemente aus dem übergeordneten Element.
// Loop over the list of Vanish elements
foreach (Vanish vanish in vanishes)
{
var parent = vanish?.Parent;
var grandparent = parent?.Parent;
// If the grandparent is a Run remove it
if (grandparent is Run)
{
grandparent.Remove();
}
// If it's not a run remove the Vanish
else if (parent is not null)
{
parent.RemoveAllChildren<Vanish>();
}
}
Beispielcode
Hinweis
In diesem Beispiel wird davon ausgegangen, dass die geöffnete Datei ausgeblendeten Text enthält. Um einen Teil des Dateitexts auszublenden, markieren Sie ihn, und drücken Sie STRG+D, um das Dialogfeld Schriftart anzuzeigen. Wählen Sie das Feld Ausgeblendet aus, und klicken Sie auf OK.
Nachstehend ist der vollständige Beispielcode in C# und Visual Basic aufgeführt.
using DocumentFormat.OpenXml.Packaging;
using DocumentFormat.OpenXml.Wordprocessing;
using System;
using System.Collections.Generic;
using System.Linq;
static void WDDeleteHiddenText(string docName)
{
// Given a document name, delete all the hidden text.
using (WordprocessingDocument doc = WordprocessingDocument.Open(docName, true))
{
if (doc.MainDocumentPart is null || doc.MainDocumentPart.Document.Body is null)
{
throw new ArgumentNullException("MainDocumentPart and/or Body is null.");
}
// Get a list of all the Vanish elements
List<Vanish> vanishes = doc.MainDocumentPart.Document.Body.Descendants<Vanish>().ToList();
// Loop over the list of Vanish elements
foreach (Vanish vanish in vanishes)
{
var parent = vanish?.Parent;
var grandparent = parent?.Parent;
// If the grandparent is a Run remove it
if (grandparent is Run)
{
grandparent.Remove();
}
// If it's not a run remove the Vanish
else if (parent is not null)
{
parent.RemoveAllChildren<Vanish>();
}
}
}
}