Abrufen von Kommentaren aus einem Textverarbeitungsdokument
In diesem Thema wird beschrieben, wie Sie die Klassen im Open XML SDK für Office verwenden, um die Kommentare aus dem Standard Dokumentteil in einem Textverarbeitungsdokument programmgesteuert abzurufen.
Öffnen des vorhandenen Dokuments mit Schreibschutz
Instanziieren Sie zum Öffnen eines vorhandenen Dokuments die WordprocessingDocument-Klasse wie in der folgenden using-Anweisung gezeigt. Öffnen Sie in derselben Anweisung die Textverarbeitungsdatei unter dem angegebenen fileName mithilfe der Open(String, Boolean) -Methode. Um die Datei zum Bearbeiten des booleschen Parameters zu öffnen, wird auf true festgelegt. In diesem Beispiel müssen Sie nur die Datei lesen. Daher können Sie die Datei für den schreibgeschützten Zugriff öffnen, indem Sie den booleschen Parameter auf false festlegen.
using (WordprocessingDocument wordDoc =
WordprocessingDocument.Open(fileName, false))
{
// Insert other code here.
}
Die using-Anweisung ist eine empfohlene Alternative zur herkömmlichen Reihenfolge ".Open, .Save, .Close". 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.
Comments-Element
Die Elemente comments und comment sind die wesentlichen Elemente bei der Arbeit mit Kommentaren in einer Textverarbeitungsdatei. Daher sollten Sie sich im folgenden Codebeispiel mit diesen Elementen vertraut machen.
Die folgenden Informationen aus der SPEZIFIKATION ISO/IEC 29500 führen das Comments-Element ein.
comments (Kommentarauflistung)
Dieses Element gibt alle im aktuellen Dokument definierten Kommentare an. Es stellt das Stammelement des Kommentarteils eines WordprocessingML-Dokuments dar.
Betrachten Sie das folgende WordprocessingML-Fragment für den Inhalt eines Kommentarteils in einem WordprocessingML-Dokument:
<w:comments>
<w:comment … >
…
</w:comment>
</w:comments>
© ISO/IEC29500: 2008.
Im folgenden XML-Schemasegment werden die Inhalte des comments-Elements definiert.
<complexType name="CT_Comments">
<sequence>
<element name="comment" type="CT_Comment" minOccurs="0" maxOccurs="unbounded"/>
</sequence>
</complexType>
Comment-Element
Die folgenden Informationen aus der SPEZIFIKATION ISO/IEC 29500 führen das Comment-Element ein.
comment (Kommentarinhalt)
Dieses Element gibt den Inhalt eines einzelnen Kommentars an, der im Kommentarteil eines WordprocessingML-Dokuments gespeichert ist.
Wird ein Kommentar nicht von Dokumentinhalt über ein entsprechendes id-Attribut einer gültigen Verwendung des commentReference-Elements referenziert, kann es beim Laden des Dokuments ignoriert werden. Wenn mehrere Kommentare denselben Wert für das id-Attribut verwenden, sollte nur ein Kommentar geladen werden, die anderen können ignoriert werden.
Betrachten Sie ein Dokument mit Text mit folgendem Kommentar:
Dieser Kommentar wird durch das folgende WordprocessingML-Fragment dargestellt.
<w:comment w:id="1" w:initials="User">
…
</w:comment>
Das comment-Element gibt das Vorhandensein eines einzelnen Kommentars im Kommentarteil an.
© ISO/IEC29500: 2008.
Das folgende XML-Schemasegment definiert den Inhalt des Kommentarelements.
<complexType name="CT_Comment">
<complexContent>
<extension base="CT_TrackChange">
<sequence>
<group ref="EG_BlockLevelElts" minOccurs="0" maxOccurs="unbounded"/>
</sequence>
<attribute name="initials" type="ST_String" use="optional"/>
</extension>
</complexContent>
</complexType>
Funktionsweise des Beispielcodes
Nach dem Öffnen der Datei mit Schreibschutz instanziieren Sie die WordprocessingCommentsPart-Klasse. Dann können Sie den inneren Text des Comment-Elements anzeigen.
foreach (Comment comment in commentsPart.Comments.Elements<Comment>())
{
Console.WriteLine(comment.InnerText);
}
Beispielcode
Im folgenden Codebeispiel wird veranschaulicht, wie in ein Textverarbeitungsdokument eingefügte Kommentare abgerufen werden. Um die GetCommentsFromDocument-Methode aufzurufen, können Sie den folgenden Aufruf verwenden, der beispielsweise Kommentare aus einer Datei mit dem Namen "Word16.docx" abruft.
string fileName = @"C:\Users\Public\Documents\Word16.docx";
GetCommentsFromDocument(fileName);
Es folgt der vollständige Beispielcode in C# und Visual Basic.
using DocumentFormat.OpenXml.Packaging;
using DocumentFormat.OpenXml.Wordprocessing;
using System;
GetCommentsFromDocument(args[0]);
static void GetCommentsFromDocument(string fileName)
{
using (WordprocessingDocument wordDoc = WordprocessingDocument.Open(fileName, false))
{
if (wordDoc.MainDocumentPart is null || wordDoc.MainDocumentPart.WordprocessingCommentsPart is null)
{
throw new System.ArgumentNullException("MainDocumentPart and/or WordprocessingCommentsPart is null.");
}
WordprocessingCommentsPart commentsPart = wordDoc.MainDocumentPart.WordprocessingCommentsPart;
if (commentsPart is not null && commentsPart.Comments is not null)
{
foreach (Comment comment in commentsPart.Comments.Elements<Comment>())
{
Console.WriteLine(comment.InnerText);
}
}
}
}