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