2015-10-15 5 views
0

В настоящее время я работаю над проектом, в котором я объединять 3 документа в один новый. Чтобы добавить их, я создаю метод AltChunk для хранения документов.Объединить несколько стилей Word 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(); 
} 

Любая помощь будет принята с благодарностью. Благодарю.

Редактировать: Я изменил использование DocumentBuilder из PowerTools, однако это все еще не решает проблему слияния стилей. Мы ценим любые предложения.

ответ

1

Что Word делает с форматированием («стилизация») зависит от источника форматирования и алгоритмов, присущих Word, о том, как справляться с конфликтами форматирования. На основании информации, предоставленной вами трудно точно знать, что ситуация с этими документами, но вот некоторые эмпирические правила:

  1. Слово сохранят прямое форматирование (например, нажав кнопку Полужирный или Курсив)

  2. Когда входящие документы имеют стили с тем же именем, что и стили, уже присутствующие в целевом документе, входящие стили будут принимать определения стилей в целевом документе. Это по дизайну, поскольку Word был задуман как инструмент создания документов, а не инструмент архивирования.

Я предполагаю, что (2) это ситуация, с которой вы столкнулись. Единственный способ сохранить определения стиля - сначала дать стилям разные имена/определить другой набор стилей и применить их к тексту вместо существующих стилей. Например, если стиль Normal для двух документов определяется по-разному, вам нужно будет скопировать определение стиля в новый стиль (например, Normal1), а затем заменить идентификатор, используемый для обычных в различных частях, составляющих документ, с помощью id используется для Normal1.

Что-то, чего я никогда не пробовал, было бы переименование идентификатора и имени для Normal, так что вам не понадобится последний шаг. Но вам может потребоваться создать стиль Normal, используя «старый» идентификатор и имя, поскольку Word ожидает, что это будет в документе. (Но вы можете попробовать без него, поскольку Word может создать его автоматически, не думая, что документ недействителен).

+0

Это на самом деле аналогичный ответ, который дал мне Эрик Уайт, создатель Open Xml Power Tools. Он упомянул, что переименование стилей поможет решить проблему. Хотя, в конце концов, я этого не делал, потому что это было отмечено низким приоритетом и не стоит исправлять на данный момент заказчиком. Спасибо за ваш ответ. Я помету это. – IyaTaisho

Смежные вопросы