Word 无法打开 table 的 DOCX 文件
Word cannot open DOCX file with a table
我正在尝试 运行 使用 Open XML API 对 DOCX 文件进行邮件合并 - 只需将 <w:t>
元素替换为 table(见下文)。即使是使用以下代码创建的最简单的 table 也会导致 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);
您不能将 <w:t>
替换为 <w:tbl>
。 table 是一个块级元素,因此您可以将它放在段落 () 所在的相同位置。
换句话说,您可以将其作为以下元素之一的子元素放置: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);
我正在尝试 运行 使用 Open XML API 对 DOCX 文件进行邮件合并 - 只需将 <w:t>
元素替换为 table(见下文)。即使是使用以下代码创建的最简单的 table 也会导致 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);
您不能将 <w:t>
替换为 <w:tbl>
。 table 是一个块级元素,因此您可以将它放在段落 (
换句话说,您可以将其作为以下元素之一的子元素放置: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);