0

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

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

下面是我如何合并文档的代码(我没有显示顶部,因为到目前为止一切都很好)。

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,但是,这仍然不能解决合并样式的问题。任何建议,将不胜感激。

4

1 回答 1

2

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

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

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

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

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

于 2015-10-23T18:06:41.083 回答