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 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
Um ein vorhandenes Dokument zu öffnen, instanziieren Sie die WordprocessingDocument -Klasse wie in der folgenden using
Anweisung gezeigt. Öffnen Sie in derselben Anweisung die Textverarbeitungsdatei an der angegebenen fileName
mithilfe der Open(String, Boolean, OpenSettings) -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 schreibgeschützten Zugriff öffnen, indem Sie den booleschen Parameter auf false
festlegen.
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.");
}
Mit v3.0.0 und höher wurde die Close() -Methode entfernt, um sich auf die using-Anweisung zu verlassen.
Dadurch wird sichergestellt, dass die Dispose() -Methode automatisch aufgerufen wird, wenn die schließende Klammer erreicht ist. Der Block, der auf die using-Anweisung folgt, richtet einen Bereich für das Objekt ein, das in der using-Anweisung erstellt oder benannt wird. Da die WordprocessingDocument -Klasse im Open XML SDK das Objekt als Teil der IDisposable Implementierung automatisch speichert und schließt und da Dispose() automatisch aufgerufen wird, wenn Sie den Block beenden, müssen Sie oder Dispose() nicht explizit aufrufenSave(), solange Sie eine using
-Anweisung verwenden.
Comments-Element
Die comments
Elemente und comment
sind entscheidend für die 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/IEC 29500: 2016
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/IEC 29500: 2016
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
Nachdem Sie die Datei für schreibgeschützten Zugriff geöffnet haben, instanziieren Sie die WordprocessingCommentsPart -Klasse. Anschließend können Sie den inneren Text des Comment Elements anzeigen.
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);
}
}
Beispielcode
Es folgt der vollständige Beispielcode in C# und Visual Basic.
using DocumentFormat.OpenXml.Packaging;
using DocumentFormat.OpenXml.Wordprocessing;
using System;
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);
}
}
}
}