Ms word Word无法打开带有表的DOCX文件

Ms word Word无法打开带有表的DOCX文件,ms-word,openxml,openxml-sdk,Ms Word,Openxml,Openxml Sdk,我正在尝试使用OpenXMLAPI对DOCX文件运行邮件合并-只是用表替换元素(见下文)。即使是使用以下代码创建的最简单的表,在打开文件时也会导致Word出错 如果我去掉了该行(这样我只有//)。没有错误,但是我当然不能有任何数据 有人能看出我做错了什么吗 Table table = new Table(new TableGrid(new GridColumn() { Width = "2000"}), new TableRow

我正在尝试使用OpenXMLAPI对DOCX文件运行邮件合并-只是用表替换
元素(见下文)。即使是使用以下代码创建的最简单的表,在打开文件时也会导致Word出错

如果我去掉了该行(这样我只有
/
/
)。没有错误,但是我当然不能有任何数据

有人能看出我做错了什么吗

Table table = new Table(new TableGrid(new GridColumn() { Width = "2000"}),
                        new TableRow(new TableCell(new Paragraph(new Run(new Text("test")))))
                                      );
TextNode.Parent.ReplaceChild<Text>(table, TextNode);
Table Table=new Table(new TableGrid(new GridColumn(){Width=“2000”}),
新TableRow(新TableCell(新段落)(新运行(新文本(“测试”)))))
);
TextNode.Parent.ReplaceChild(表,TextNode);

您不能将
替换为
。表格是块级元素,因此可以将其放置在段落()所在的相同位置

换句话说,您可以将其作为以下元素之一的子元素放置:body、comment、customXml、docPartBody、endnote、footnote、ftr、hdr、sdtContent、tc和txbxContent

那么,试试这样的方法:

//TextNode(Text)->Parent(Run)->Parent(段落)
var段落=TextNode.Parent.Parent作为段落;
段落.Parent.ReplaceChild(表格,段落);
编辑:

如果父元素为
,则应在其末尾添加空段落:

//TextNode(Text)->Parent(Run)->Parent(段落)
var段落=TextNode.Parent.Parent作为段落;
var parent=段落。parent;
父项替换子项(表,段落);
if(父项为TableCell)
parent.InsertAfter(新段落(),表格);

只要我还在表格后面添加一个段落就可以了——在我的例子中,表格在另一个表格单元格中,如果没有后续段落,Word就会抛出一个合适的段落@Mario Z-我在哪里可以找到讨论这种行为的文档?“我没有看到任何讨论这一点的内容。@DmitryStreblechenko根据规范,唯一需要的是一个表单元格必须至少包含一个块级元素。因此,这似乎是Microsoft Word特有的要求。我尝试用不同的Word应用程序(如LibreOffice Writer)打开这样一个文档,他们并没有抱怨缺少的段落(但我确实注意到,在这种情况下,其中一些文档具有奇怪的单元格渲染)。@DmitryStreblechenko仅供参考,在进行一些实验时,我注意到单元格中的最后一个块也可以是包含段落的SDT元素。