Ich habe eine Reihe von Tabellen in einer Word-Vorlage, die mit OpenXML bearbeitet werden. Einige von ihnen müssen auf Bedingungen entfernt werden, abhängig, wobei in diesem Fall verwende ich diesen Code:OpenXML - Entfernen TableCaption in Word-Dokument
table.RemoveAllChildren();
table.Remove();
, die die Table
und alle Zeilen nicht entfernt, aber nicht die TableCaption
.
Ich benutze foreach (Table t in XMLReport.MainDocumentPart.Document.Descendants<Table>().ToList())
so die ToList() erlaubt mir, während der Iteration zu entfernen. Und die Tabellen selbst werden aus dem Dokument entfernt, aber die Beschriftungen bleiben erhalten. Ich habe versucht, die Beschriftungen in eine Liste einzufügen und sie außerhalb der Schleife zu entfernen, aber das hat nicht funktioniert. Stellen Sie den Text ein, der einem neuen TableCaption
zugewiesen wird, scheint nichts sie zu ändern. Das Löschen des TableProperties
übergeordneten Elements und aller seiner untergeordneten Elemente führt ebenfalls nicht zu einer Änderung. Der Aufruf von Remove()
auf dem TableCaption
funktioniert nicht so gut.
Was ist der richtige Weg, um die TableCaption
zu entfernen?
Voll Code:
byte[] byteArray = File.ReadAllBytes(@"C:\path\XML in.docx");
using (MemoryStream stream = new MemoryStream())
{
stream.Write(byteArray, 0, byteArray.Length);
using (WordprocessingDocument XMLDoc = WordprocessingDocument.Open(stream, true))
{
foreach (Table t in XMLDoc.MainDocumentPart.Document.Descendants<Table>().ToList())
{
//switch case
if (object1.prop1.Count == 0)
{
table.RemoveAllChildren();
table.Remove();
}
}
}
File.WriteAllBytes(@"C:\path\XML out.docx", stream.ToArray());