C# 邮件合并将替换整个合并字段并丢失格式

C# 邮件合并将替换整个合并字段并丢失格式,c#,ms-office,mailmerge,C#,Ms Office,Mailmerge,我有一个现有的word文档,它有一个格式化的邮件合并字段{MERGEFIELD Payment\u Date\@MMMM d,yyyy} 当我从C传递字符串(比如2016年1月1日)以进行邮件合并时,代码字段将被选中。选择将选择整个合并字段,并将其替换为我传递的字符串,我将丢失格式设置 我怎样才能防止这种情况 foreach (Microsoft.Office.Interop.Word.Field field in document.Fields) {

我有一个现有的word文档,它有一个格式化的邮件合并字段{MERGEFIELD Payment\u Date\@MMMM d,yyyy}

当我从C传递字符串(比如2016年1月1日)以进行邮件合并时,代码字段将被选中。选择将选择整个合并字段,并将其替换为我传递的字符串,我将丢失格式设置

我怎样才能防止这种情况

foreach (Microsoft.Office.Interop.Word.Field field in document.Fields)
{                         
    if (field.Code.Text.Contains("Payment_Date"))
    {
        DateTime pDate = new DateTime(2016, 12, 30);
        field.Select();                                   

        application.Selection.TypeText(pDate.ToString());            
    } 
}      

这是我用来进行邮件合并的代码

您要么从字段中提取格式字符串,并将其转换为可以正确格式化C字符串的内容,要么将字段替换为保留格式字符串的字段,并让Word为您进行格式化

例如,您可以将其替换为

{ QUOTE "2016-12-30" \@ "MMMM d,yyyy" } 
我建议您以YYYY-MM-DD格式插入日期字符串,因为我相信在这种情况下Word总是正确解释日期和月份

注意,您不能只插入带有{}的文本-您必须插入一个字段。然后,如果只需要结果,可以确保字段已更新,然后取消字段链接,只保留结果

还有一种情况-如果MERGEFIELD字段没有日期/时间格式开关怎么办?在这种情况下,您将需要强加一种格式,我认为不可能发现文档作者的意图