首页 > 解决方案 > Word 无法使用表格打开 DOCX 文件

问题描述

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

如果我摆脱了这一行(这样我只有<w:tbl>/ <w:tblGrid>/ <w:GridCol>)。没有错误,但是我当然不能有任何数据。

谁能看到我做错了什么?

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

在此处输入图像描述

在此处输入图像描述

标签: ms-wordopenxmlopenxml-sdk

解决方案


您不能替换<w:t><w:tbl>. 表格是一个块级元素,因此您可以将其放置在您拥有段落 (<w:p>) 的相同位置。

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

所以,试试这样的事情:

// TextNode (Text) -> Parent (Run) -> Parent (Paragraph)
var paragraph = TextNode.Parent.Parent as Paragraph;
paragraph.Parent.ReplaceChild(table, paragraph);

编辑:

如果父元素是<w:tc>,则应在其末尾添加一个空段落:

// TextNode (Text) -> Parent (Run) -> Parent (Paragraph)
var paragraph = TextNode.Parent.Parent as Paragraph;

var parent = paragraph.Parent;
parent.ReplaceChild(table, paragraph);

if (parent is TableCell)
    parent.InsertAfter(new Paragraph(), table);

推荐阅读