Некоторая справочная информация о поведении: по умолчанию и по замыслу Word будет использовать те же определения style , как определено в документе target , так что контент будет поступатьв объединяется "безразлично" (с точки зрения форматирования). Если входящий контент имеет те же имена стилей, которые применены к тому, что уже присутствует в целевом документе, форматирование входящего контента изменится.
Как показано в ответе, PasteAndFormat
сметод параметра Word.WdRecoveryType.wdFormatOriginalFormatting
при использовании буфера обмена Windows переопределяет поведение по умолчанию и поддерживает исходное форматирование.
Однако работа через буфер обмена не всегда желательна или идеальна. Есть еще один способ, который заключается в изменении имен стилей в исходном документе, чтобы они отличались от имени в целевом документе. Этот подход будет работать, если стили использовались последовательно в исходном документе. (Однако форматирование, примененное вручную, все еще может быть потеряно.)
Следующий фрагмент кода иллюстрирует подход к стилям абзаца. Он создает новый стиль на основе стилей, используемых в документе - новый стиль является точной копией, за исключением имени. Затем выполняется поиск / замена, чтобы заменить все экземпляры стиля новым стилем. Теперь содержимое может быть вставлено в другой документ, и форматирование сохраняется.
Word.Document doc = wdApp.ActiveDocument;
Word.Style sOld = null;
Word.Style sCopy = null;
Word.Find f = doc.Content.Find;
//Select Normal text, otherwise Normal will take on character formatting of current selected text
Word.Selection sel = wdApp.Selection;
sel.Find.set_Style(Word.WdBuiltinStyle.wdStyleNormal);
sel.Find.Execute("", Type.Missing,
Type.Missing, Type.Missing, Type.Missing, Type.Missing, true, Word.WdFindWrap.wdFindStop,
true, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
foreach (Word.Style s in doc.Styles)
{
if ((s.InUse) && (s.Type == Word.WdStyleType.wdStyleTypeParagraph) &&
(!s.NameLocal.Contains(" Copy")))
{
sOld = s;
sCopy = doc.Styles.Add(sOld.NameLocal + " Copy", sOld.Type);
sCopy.set_BaseStyle(sOld);
f.set_Style(sOld);
f.Replacement.set_Style(sCopy);
f.Execute("", Type.Missing,
Type.Missing, Type.Missing, Type.Missing, Type.Missing, true, Word.WdFindWrap.wdFindStop,
true, "", Word.WdReplace.wdReplaceAll, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
}
}