如何在合并字段中的每个项目之间放置换行符(用于格式化)

时间:2019-05-23 21:51:31

标签: line-breaks mailmerge word-2010 mergefield

我将邮件合并附加到需要重新格式化的SQL查询中。已插入“ action_name”字段,并且可以正常工作。 [编辑:为澄清起见,所有数据都出现在一个名为“ action_name”的合并域名称下。]

例如,它将出现在这样的字母中:

PersonA, You are missing the following items: 'A, B, C, D, E and F.'
PersonB, You are missing the following items: 'A and B'
PersonC, You are missing the following items: 'A'
PersonD, You are missing the following items: 'A, B, C and D'

当然每个人都会收到自己的来信,因此他们只会看到自己的失踪物品。

当我们将信件交给其他部门时,他们每次必须手动按Enter键以重新格式化该信件,并使它看起来像这样:

PersonA, You are missing the following items: 
'A, 
 B, 
 C, 
 D, 
 E,
 F'

在此示例中,我只会做PersonA。我想你明白了。

如何使用邮件合并中的代码(或SQL代码)执行此操作,以便其他人不必手动执行此操作?我已经知道\ v垂直格式对此无效。我读到它是针对东亚语言的。感谢您的提示!

2 个答案:

答案 0 :(得分:1)

根据您的描述,“ A,B,C,D,E和F”以及“ A和B”都是通过单个合并字段输出的。 Word没有用于将中断插入此类内容的字段编码机制。如果输出是由单独的mergefields生成的,则插入中断将是微不足道的。您当然可以在mailmerge主文档中添加一个宏,以自动进行合并后的处理。例如,以下宏会拦截“合并到单个文档”操作以执行所有处理:

Sub MailMergeToDoc()
Application.ScreenUpdating = False
ActiveDocument.MailMerge.Execute
With ActiveDocument.Range.Find
  .ClearFormatting
  .Replacement.ClearFormatting
  .Forward = True
  .Wrap = wdFindContinue
  .Format = False
  .MatchWildcards = True
  .Text = "('[A-Z],)"
  .Replacement.Text = "^l\1"
  .Execute Replace:=wdReplaceAll
  .Text = "([A-Z],) "
  .Replacement.Text = "\1^l"
  .Execute Replace:=wdReplaceAll
  .Text = "([A-Z]) and ([A-Z])"
  .Replacement.Text = "\1,^l\2"
  .Execute Replace:=wdReplaceAll
End With
Application.ScreenUpdating = True
End Sub

答案 1 :(得分:0)

您可以使用SQL在每个列表项进入Word之前在它们之间插入一个换行符。取决于您所使用的系统,语法会有所不同,但是您应该具有连接ascii字符代码10的功能。

例如在Transact-SQL / SQL Server上: SELECT 'A' + char(10) + 'B' + char(10) + 'C'

或用换行符替换逗号: SELECT replace('A, B, C', ',', char(10))