2015-10-15 224 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

相關問題