OpenXML - 删除Word doc中的TableCaption

时间:2017-08-21 16:37:17

标签: c# ms-word openxml openxml-sdk

我在Word模板中有许多表正在使用OpenXML进行操作。其中一些可能需要根据条件删除,在这种情况下我使用此代码:

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

删除Table和所有行,但不删除TableCaption

我使用foreach (Table t in XMLReport.MainDocumentPart.Document.Descendants<Table>().ToList())所以ToList()允许我在迭代时删除。表格本身也从文档中删除,但字幕仍然存在。我确实尝试将标题添加到列表中并在循环外删除它们,但这并不起作用。设置文本,分配给新的TableCaption,似乎没有任何内容可以修改它们。删除TableProperties父母及其所有子女也没有做任何事情。在Remove()上拨打TableCaption也无效。

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

1 个答案:

答案 0 :(得分:0)

我找到了一个有点计划的解决方案。您在实际文档中看到的表标题是Paragraph对象到OpenXML,可以删除这些。所以我创建了一个包含每个标题文本的列表,然后在我的for循环表中删除了需要保留在doc中的字符串。然后我得到文档中的所有段落后代,并过滤到与其余段落元素之一完全匹配的那些。然后我只删除那些段落元素。