Substitua Mergefields em um documento Word 2003 e mantenha o estilo
-
20-09-2019 - |
Pergunta
Eu tenho tentado criar uma biblioteca para substituir os campos Mergefields em um documento do Word 2003, tudo funciona bem, exceto que eu perco o estilo aplicado ao campo quando o substituo, existe uma maneira de mantê -lo?
Este é o código que estou usando para substituir os campos:
private void FillFields2003(string template, Dictionary<string, string> values)
{
object missing = Missing.Value;
var application = new ApplicationClass();
var document = new Microsoft.Office.Interop.Word.Document();
try
{
// Open the file
foreach (Field mergeField in document.Fields)
{
if (mergeField.Type == WdFieldType.wdFieldMergeField)
{
string fieldText = mergeField.Code.Text;
string fieldName = Extensions.GetFieldName(fieldText);
if (values.ContainsKey(fieldName))
{
mergeField.Select();
application.Selection.TypeText(values[fieldName]);
}
}
}
document.Save();
}
finally
{
// Release resources
}
}
Tentei usar os métodos CopyFormat e BastEformat na seleção, também usando o get_style e o set_style, mas sem exposição.
Solução
Em vez de usar o TypeText por cima de sua seleção, use a propriedade Resultado do campo:
if (values.ContainsKey(fieldName))
{
mergeField.Result = (values[fieldName]);
}
Isso garantirá que qualquer formatação no campo seja mantida.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow