2015-10-15 113 views
0

我目前正在开发一个项目,将3个文档合并为一个新项目。为了添加它们,我创建了一个AltChunk方法来包含这些文档。将多个Word文档样式合并为一个Open Xml

我的问题是在三者之间的造型上有冲突。因此,我的意思是我保存一张桌子,底下有红色文字。但是,一旦三者合并成新的文件,该文件的样式将重置为纯黑色文本。有没有办法将所有三种样式合并到这个新文档中?

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

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

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

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

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

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

我从来没有尝试过的东西是重命名正常的ID和名称,这样你就不需要最后一步。但是,您可能必须使用“旧”ID和名称创建一个“正常”样式,因为Word希望它位于文档中。 (但是你可以尝试没有,因为Word可能会自动创建它,而不会认为文档是无效的)。

+0

实际上,Open Xml Power Tools的创建者Eric White给了我一个类似的答案。他提到重命名样式可以解决问题。尽管最终我没有这样做,因为这被标记为低优先级,目前客户不值得修复。 感谢您的回答。我会标记它。 – IyaTaisho

相关问题