我有一个超级简单的文档,只有一个空行的表,我正在尝试删除所有的行。(其目的实际上是最终只删除空白行,但我在删除任何行方面都没有任何运气)。
public static void SearchAndReplace(string document)
{
using (WordprocessingDocument doc = WordprocessingDocument.Open(document, true))
{
var body = doc.MainDocumentPart.Document.Body;
foreach (var table in body.Elements<Table>())
{
foreach (var row in table.Elements<TableRow>())
{
table.RemoveChild<TableRow>(row);
continue;
}
}
doc.Save();
}
}文档只有一个页面,只有一个有四行的表,但由于某种原因,上面没有删除任何行。
我也试过
row.Remove()这也没有效果,即在运行此操作之后,没有任何行被移除。有什么好主意吗?这就是我的文档

谢谢
发布于 2020-03-22 08:47:53
在第一次尝试中,您使用了由IEnumerable<TableRow>方法创建的OpenXmlElement.Elements<T>(),该方法从Table的ChildElements集合中枚举TableRow实例。动态计算ChildElements的集合,并使用yield return返回实例。当您通过删除元素来更改ChildElements的集合时,
TableRow元素,TableRow实例。G 217
但是,我想您应该能够删除第一个TableRow实例。
使用ToList(),您可以将TableRow实例的集合具体化,并在一个单独的List<TableRow>中获取所有实例。这样,您正在处理的是一个固定的集合,而不是在执行过程中动态计算的集合。这就是为什么这起作用。
通常,您不应该更改枚举的集合(例如,通过删除集合的元素)。
https://stackoverflow.com/questions/60788884
复制相似问题