我有一个word文档,里面有一个表格。我试图在文档中多次克隆该表。下面的代码成功完成了这项工作,但在我保存并尝试打开文件后,我收到一条警告 -“Word 在 {filename} 中发现了不可读的内容...”。如果我仅克隆表格一次,则当我尝试打开文档时不会收到任何警告。我正在使用 OpenXml 2.20.0。
Table sourceTable = main.Document.Body.Descendants<Table>()
.FirstOrDefault(table => table.Descendants<TableCaption>()
.FirstOrDefault()?.Val == "Table");
var tables = new List<Table>();
for (int i = 0; i < 2; i++)
{
sourceTable.InsertAfterSelf<Table>((Table)sourceTable.Clone());
}
sourceTable.Remove();
开放 xml api 可能有点挑剔,尤其是在数据存储方式方面。由于单个克隆在您删除表时起作用,因此我会在文档中其他位置查找表列表(您需要将克隆表添加到其中),或者在克隆表上查找唯一的 id,其中word 预计只有一张这样的表。话又说回来,我在这里猜测。唯一确定的方法是尝试并模拟 word 程序如何更新文档以执行相同的任务。
我能给出的最好建议是手动进行更改并检查对 XML 所做的更改作为其中的一部分。这依赖于这样一个事实:您可以将文档扩展名从
.docx
更改为 .zip
并检查文档 XML。步骤是: