OpenXML 多次克隆表

问题描述 投票:0回答:1

我有一个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();
c# openxml wordprocessingml
1个回答
0
投票

开放 xml api 可能有点挑剔,尤其是在数据存储方式方面。由于单个克隆在您删除表时起作用,因此我会在文档中其他位置查找表列表(您需要将克隆表添加到其中),或者在克隆表上查找唯一的 id,其中word 预计只有一张这样的表。话又说回来,我在这里猜测。唯一确定的方法是尝试并模拟 word 程序如何更新文档以执行相同的任务。

我能给出的最好建议是手动进行更改并检查对 XML 所做的更改作为其中的一部分。这依赖于这样一个事实:您可以将文档扩展名从

.docx
更改为
.zip
并检查文档 XML。步骤是:

  1. 从包含表格的文档开始,其中表格尚未被复制。这是你的基线。
  2. 创建文档的新副本,您将在其中手动进行更改。
  3. 复制文档中的表格,手动模拟您想要自动化的流程。
  4. 将基线和更新后的文档扩展名更新为 .zip
  5. 使用 Beyond Compare 之类的工具来比较每个 zip 的内容,以隔离 word 程序所做的更改。
© www.soinside.com 2019 - 2024. All rights reserved.