C# 替换Word 2003文档中的合并字段并保留样式

C# 替换Word 2003文档中的合并字段并保留样式,c#,interop,ms-word,vsto,mergefield,C#,Interop,Ms Word,Vsto,Mergefield,我一直在尝试创建一个库来替换Word 2003文档上的合并字段,一切正常,只是在替换字段时丢失了应用于该字段的样式,有办法保留它吗 这是我用来替换字段的代码: private void FillFields2003(string template, Dictionary<string, string> values) { object missing = Missing.Value; var application = new ApplicationClass();

我一直在尝试创建一个库来替换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
    }
}
private void FillFields2003(字符串模板、字典值)
{
缺少对象=缺少.Value;
var application=new ApplicationClass();
var document=新的Microsoft.Office.Interop.Word.document();
尝试
{
//打开文件
foreach(document.Fields中的字段合并字段)
{
if(mergeField.Type==WdFieldType.wdFieldMergeField)
{
字符串fieldText=mergeField.Code.Text;
字符串fieldName=Extensions.GetFieldName(fieldText);
if(值.ContainsKey(字段名))
{
mergeField.Select();
application.Selection.TypeText(值[字段名]);
}
}
}
document.Save();
}
最后
{
//释放资源
}
}

我尝试在选择中使用CopyFormat和PasteFormat方法,也使用get_样式和set_样式,但设置为no exent。

使用字段的结果属性,而不是在选择的顶部使用TypeText:

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

这将确保保留字段中的任何格式。

Hi这帮了大忙!谢谢尽管如此,正确的格式是:mergeField.Result.Text=(值[fieldName])。因为结果的类型是“范围”。谢谢你,正如你所说的,当然。虽然它有效,但结果并不像预期的那样。我的代码是
{MERGEFIELD ClientName*Upper}
。但是,在运行合并后,它不会显示客户端名称的大写字母。你能帮助我吗?谢谢。@ThangNguyen你可能想问一个新问题。我已经很久没有回答上面的问题了,我不记得它是如何详细工作的