Замените MergeFields в документе Word 2003 и сохраните стиль

Я пытался создать библиотеку для замены MergeFields в документе Word 2003, все работает нормально, за исключением того, что я теряю стиль, примененный к полю, когда я его заменяю, есть ли способ сохранить его?

Это код, который я использую для замены полей:

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
    }
}

Я пытался использовать методы CopyFormat и PasteFormat при выборе, также используя get_style и set_style, но безуспешно.


person willvv    schedule 06.10.2009    source источник


Ответы (1)


Вместо того, чтобы использовать TypeText поверх вашего выбора, используйте свойство Result поля:

          if (values.ContainsKey(fieldName))
          {
             mergeField.Result = (values[fieldName]);
          }

Это обеспечит сохранение любого форматирования в поле.

person hawbsl    schedule 19.10.2009
comment
Привет Это очень помогло! Благодарю. Хотя правильный формат: mergeField.Result.Text = (values[fieldName]). Поскольку тип результата — Range. Большое спасибо - person willvv; 20.10.2009
comment
Да, f.Result.Text, как вы говорите, абсолютно. - person hawbsl; 20.10.2009
comment
Хотя это работает, результат не такой, как предполагалось. Мой код {MERGEFIELD ClientName * Upper}. Однако после выполнения слияния имя клиента не отображается в верхнем регистре. Вы можете помочь мне? Спасибо. - person Thang Nguyen; 15.10.2015
comment
@ThangNguyen, возможно, вы захотите задать это как новый вопрос. я уже давно не отвечал на вышеприведенное, и я не буду подробно вспоминать, как это работает - person hawbsl; 15.10.2015