【问题标题】:Mail merge replaces entire merge field and loses formatting邮件合并替换整个合并字段并丢失格式
【发布时间】:2016-03-04 17:56:11
【问题描述】:

我有一个现有的 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# ms-office mailmerge


    【解决方案1】:

    您要么必须从字段中提取格式字符串并将其转换为可让您正确格式化 C# 字符串的内容,要么(更简单的 IMO)将字段替换为保留格式字符串的字段并让 Word 为你。

    例如,您可以将其替换为

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

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

    (注意,你不能只用 { } 插入文本 - 你必须插入一个字段。然后,如果你只想要结果,你可以确保该字段已更新,然后取消链接该字段,离开结果)。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-11
      • 1970-01-01
      • 2021-10-15
      • 1970-01-01
      • 2010-11-17
      • 1970-01-01
      相关资源
      最近更新 更多