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

时间:2015-10-15 18:41:14

标签: c# openxml wordprocessingml

我目前正在开展一个项目,我将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,但仍然无法解决合并样式的问题。任何建议将不胜感激。

1 个答案:

答案 0 :(得分:1)

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

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

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

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

    我从未尝试过的东西是重命名Normal的id和名称,这样你就不需要最后一步了。但是你可能需要使用&#34; old&#34;来创建一个Normal样式。作为Word的id和名称期望在文档中。 (但是你可以尝试不用,因为Word可以自动创建它而不用认为文档无效)。