Freigeben über


Entfernen von ausgeblendetem Text aus einem Textverarbeitungsdokument

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 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.


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, 1oder angegeben ist, true ist die -Eigenschaft aktiviert. Wenn der Wert off, 0oder 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>();
            }
        }
    }
}

Siehe auch