【问题标题】:C# copy a table from a word document and add it to another word documentC#从word文档中复制表格并将其添加到另一个word文档中
【发布时间】:2019-11-05 10:12:37
【问题描述】:

我想从 MS Word 文档中获取一个表格,然后将该表格添加到另一个具有所有格式的文档中。我正在使用 OOXML 来执行此操作。为了识别一个特定的表格,我分配了“Alt Text -> Title”,我可以从源文档中获取表格及其内容。我已经在目标文档中添加了一个表格,其中包含特定的“Alt Text -> Title 并且也能够获取它。

我使用下面的代码将表格添加到目标文档。但是,当我打开目标文档时,它会显示 MS Word 错误消息。

MS Word 错误 -> “文件已损坏,无法打开。”

当我针对此错误单击“确定”时,它显示消息“Word 在 .docx 中发现不可读的内容。您要恢复此文档的内容吗?如果您信任此文档的来源,请单击“是”。当我点击是时。

它显示带有表格的目标文档及其所有格式。

如何删除此错误/警告消息?我对导致此错误的代码做错了什么?

注意: 我正在尝试复制的表格中有一些带有 超链接 的文本,这会导致问题。如果我删除超链接,它工作正常。

TableProperties tableProperty = sourceDocument.Document.Body.Descendants<TableProperties>().Where(tp => tp.TableCaption != null && tp.TableCaption.Val.InnerText.Contains("sourceTable")).FirstOrDefault();

TableProperties destTableProperty = destinationDocument.Document.Body.Descendants<TableProperties>().Where(tp => tp.TableCaption != null && tp.TableCaption.Val.InnerText.Contains("destinationTable")).FirstOrDefault();

sourceTable = (Table)tableProperty.Parent;
destinationTable = (Table)destTableProperty.Parent;
destinationTable.InsertBeforeSelf<Table>((Table)sourceTable.CloneNode(true));
destinationTable.Remove();

【问题讨论】:

  • 追踪此类事情的一个好方法是将修复的文档保存为不同的文件名。尝试在 Open XML SDK 工具中打开原始文档,并使用“比较”功能打开修复后的文档。这将向您展示 Word Open XML 从第一个文档创建第二个文档所需的代码之间的差异。如果该工具无法打开第一个文档,请打开已修复的文档并将工具生成的代码与您正在使用的代码进行比较以创建表格。
  • 感谢您的建议。 Open XML SDK 工具有助于验证和比较文档。但是,Open XML SDK 工具也会显示新文档的验证错误。所以有点混淆它是如何工作的。

标签: c# ms-word openxml-sdk clonenode openxml-table


【解决方案1】:

这个问题能够将表格从一个 Word 文档复制到另一个文档,并且上述代码可以正常工作。

有关文档损坏的警告/错误消息的原因是由于表格文本中的超链接。如果我删除超链接,它工作正常。

对于超链接问题,我将发布单独的问题并关闭此问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-22
    相关资源
    最近更新 更多