将多个 Word 文档样式合并为一个打开 Xml

Merge multiple Word Document styles into one Open Xml

我目前正在进行一个项目,我将 3 个文档合并为一个新文档。为了添加它们,我正在创建一个 AltChunk 方法来包含文档。

我的问题是三者之间的样式存在冲突。就此而言,我的意思是我保存了一个 table 下面有红色文本的。然而,一旦这三个合并成一个新的,该文档的样式就会重置为纯黑色文本。有没有办法将所有三个样式合并到这个新文档中?

下面是我在文档中合并的代码(我没有显示顶部,因为到目前为止一切正常)。

using (WordprocessingDocument package = WordprocessingDocument.Create(fileName, DocumentFormat.OpenXml.WordprocessingDocumentType.Document))
{
    ...
    #region Append Non-Standard Section Template
    var nssAltChunkId = "AltChunkIdNSS" + this.AopPlanId.Value.ToString();
    var nssChunk = package.MainDocumentPart.AddAlternativeFormatImportPart(
                     AlternativeFormatImportPartType.WordprocessingML, nssAltChunkId);
    using (var fileStream = new MemoryStream(nssBuffer))
    {
        nssChunk.FeedData(fileStream);
    }

    var nssAltChunk = new DocumentFormat.OpenXml.Wordprocessing.AltChunk();
    nssAltChunk.Id = nssAltChunkId;
    package.MainDocumentPart.Document.Body.InsertAfter(nssAltChunk, package.MainDocumentPart.Document.Body.Elements<Paragraph>().Last());
    #endregion

    ... //Next 2 documents are the same way

    package.MainDocumentPart.Document.Save();
}

如有任何帮助,我们将不胜感激。谢谢

编辑:我改为使用 PowerTools 中的 DocumentBuilder,但是,这仍然没有解决合并样式的问题。如有任何建议,我们将不胜感激。

Word 对格式的处理方式 ("styling") 取决于格式的来源以及 Word 中固有的算法如何处理格式冲突。根据您提供的信息,很难确切了解这些文件的情况,但这里有一些经验法则:

  1. Word 将保留直接格式(例如单击粗体或斜体)

  2. 当传入文档的样式与目标文档中已存在的样式同名时,传入样式将采用目标文档中样式的定义。这是设计使然,因为 Word 被设计为文档制作工具,而不是归档工具。

我猜 (2) 是您面临的情况。保留样式定义的唯一方法是首先为样式指定不同的名称/定义一组不同的样式,然后将它们应用于文本以代替现有样式。例如,如果两个文档的 Normal 样式定义不同,您需要将样式定义复制到新样式(例如 Normal1),然后将构成文档的各个部分中用于 normal 的 id 替换为用于 Normal1 的 id。

我从未尝试过的方法是重命名 Normal 的 ID 和名称,这样您就不需要最后一步了。但是您可能必须使用 "old" id 和名称创建一个 Normal 样式,因为 Word 希望它们出现在文档中。 (但您可以不尝试,因为 Word 可能会在不认为文档无效的情况下自动创建它)。