邮件合并将替换整个合并域并丢失格式

本文关键字:合并 格式 替换 | 更新日期: 2023-09-27 18:36:43

我有一个现有的word文档,它有一个格式化的邮件合并字段({ MERGEFIELD Payment_Date '@ "MMMM d,yyyy" })。

当我从 C# 传递一个字符串(比如 (01/01/2016))进行邮件合并时,代码字段。Select() 选择整个合并字段并将其替换为我正在传递的字符串,并且丢失了格式。

我该如何防止这种情况?

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# 字符串格式的内容,或者(更简单的 IMO)将字段替换为保留格式字符串并让 Word 为您设置格式的字段。

例如,您可以将其替换为

{ QUOTE "2016-12-30" '@ "MMMM d,yyyy" } 

(我建议您以 YYYY-MM-DD 格式插入日期字符串,因为我相信在这种情况下,Word 总是正确解释日期和月份)。

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

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