2017-08-21 2 views
0

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()); 

Antwort

0

fand ich eine Lösung, die mit einer wenig Planung funktioniert. Die Tabellenbeschriftungen, die Sie im tatsächlichen Dokument sehen, sind Absatzobjekte für OpenXML, und diese können entfernt werden. Also habe ich eine Liste mit dem Text jeder Überschrift erstellt und dann während meiner for-Schleife über die Tabellen die Strings entfernt, die im Dokument bleiben müssen. Dann erhalte ich alle Nachkommen des Absatzes in dem Dokument und filtere nach denjenigen, die genau mit einem der verbleibenden Absatzelemente übereinstimmen. Dann entferne ich einfach diese Absatzelemente.