ms-word - 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);
解决方案
您不能替换<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);
推荐阅读
- javascript - 将数组的每个值应用于一个元素,直到到达数组的末尾?
- css - LESS 中复杂的 calc() 无法按预期工作
- c# - RabbitMQ RPC 如何自动删除回调队列
- api - 类型:国家地区状态问题
- android - android不进入协程
- r - 为什么我在 R 的 DLNM(dlnm 包)中出现此错误?
- python - Woocommerce 产品抓取常规和销售价格未提取
- scipy - 最小化(方法='BFGS')和 scipy.optimize.fmin_bfgs 之间的区别
- hyperledger-fabric - 在 Hyperledger Fabric 上使用 testnetwork 创建通道时出错
- c# - .Net Core 3.1 MVC 身份验证个人用户帐户和 ASP.NET Core 项目中的脚手架身份