2017-08-21 12 views
0

OpenXMLで操作されているWordテンプレートに多数のテーブルがあります。 Tableと、すべての行ではなくTableCaptionを削除しOpenXML - WordでTableCaptionを削除する

table.RemoveAllChildren(); 
table.Remove(); 

:それらのいくつかは、その場合には、私はこのコードを使用して、条件に応じて削除する必要があるかもしれません。

私はforeach (Table t in XMLReport.MainDocumentPart.Document.Descendants<Table>().ToList())を使用しているので、ToList()は反復処理中に削除することができます。テーブル自体はドキュメントから削除されますが、キャプションはそのまま残ります。キャプションをリストに追加してループ外に取り除こうとしましたが、うまくいきませんでした。テキストを設定し、新しいTableCaptionに割り当てると、何も変更されないように見えます。 TableProperties親とその子をすべて削除しても何もしません。 TableCaptionRemove()を呼び出すことはうまくいきません。

TableCaptionを削除する適切な方法は何ですか?

全コード:

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

答えて

0

私は少しの計画と連携し解決策を見つけました。実際のドキュメントで表示される表のキャプションは、OpenXMLのParagraphオブジェクトであり、これらは削除できます。そこで、各キャプションのテキストを含むリストを作成し、テーブル上のforループ中にドキュメントに残す必要のある文字列を削除します。次に、ドキュメント内のすべての段落子孫を取得し、残りの段落要素のいずれかと完全に一致するものにフィルタリングします。そして、それらの段落要素を削除します。

関連する問題