邮件合并将替换整个合并域并丢失格式
本文关键字:合并 格式 替换 | 更新日期: 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 字段没有日期/时间格式开关怎么办?在这种情况下,您将需要强加一种格式(我认为不可能发现文档作者的意图)。