Как поместить разрыв строки между каждым элементом в поле слияния (для форматирования) - PullRequest
0 голосов
/ 24 мая 2019

У меня есть Mail Merge, присоединенный к 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'

Конечно, каждый человек получает свое собственное письмо, поэтому он видит только свои пропавшие вещи.

Когда мы передаем письмо в другой отдел, им приходится вручную нажимать клавишу ввода каждый раз, чтобы переформатировать письмо и сделать его похожим на это:

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

Я буду использовать PersonA только в этом примере. Я думаю, вы поняли.

Как я могу сделать это, используя код в Mail Merge (или в коде SQL), чтобы другим не приходилось делать это вручную? Я уже знаю, что вертикальное форматирование \ v не работает для этого. Я читал, что это для восточноазиатских языков. Спасибо за любые советы!

1 Ответ

1 голос
/ 24 мая 2019

Из вашего описания, «A, B, C, D, E и F» и «A и B» каждый выводятся через одно поле слияния.В Word нет механизма кодирования полей для вставки разрывов в такой контент.Вставка разрывов будет тривиальной, если выходные данные будут генерироваться отдельными полями слияния.Конечно, вы можете добавить макрос в основной документ 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
...