Как подавить пустые строки в слиянии почты Microsoft Word 2007? - PullRequest
1 голос
/ 26 апреля 2011

Я настраиваю файл слияния, который читает из файла CSV.В CSV-файле есть ~ 20 булевых полей, которые создают тело файла слияния Word.Проблема в том, что если все первые 19 полей "N", то файл слияния Word будет иметь 19 пробелов, а затем вывести 20-е поле под всеми ними.Есть ли способ подавить вывод этих пустых строк, используя встроенные правила слияния?


Вот заголовок и пример строки файла CSV:
"firstname","lastname","PRNT1040","LEGALGRD","ACADTRAN","STUD1040","VERWKSIN","VERWKSDP","UNEMPLOY","SSCARD","HSDPLOMA","DPBRTCFT","DEATHCRT","USCTZPRF","SLCTSERV","PROJINCM","YTDINCM","LAYOFFNT","MAJRCARS","W2FATHER","W2MOTHER","W2SPOUSE","W2STUDNT","2YRDEGRE","4YEARDEG","DPOVERRD"
"Joe","Smith","N","N","N","N","N","N","N","N","N","N","N","N","N","N","N","N","N","N","N","N","N","N","N","Y"

Вот несколько строк файла слияния, которые я пробую (изображение связано, потому что копирование и вставка слияния непоказать оригинал документа)

msword_mailmerge


Кто-нибудь знает, как обойти это?Я попытался поместить SKIPIF перед условными обозначениями, но это тоже не сработало.

Ответы [ 3 ]

1 голос
/ 24 февраля 2012

Простым было бы пропустить секцию 'false' в вашем условии IF.

Просто напишите истинную часть

IF MERGEFIELD = "Y" "true section"

Поскольку вы включили секцию false, она будет (я думаю) учесть

1 голос
/ 27 апреля 2011

Следующее условное поле IF устранит пробел, вызванный пустым средним начальным полем:

{FNAME} {IF {MI} <> "" "{MI} "}{LNAME} 

Следующее условное поле MERGEFIELD удалит пробелы в любом поле. Например, учитывая следующие поля,

{Prefix} {FirstName} {LastName} 

следующие условные операторы будут корректно подавлять пространство, обычно включаемое для любых пустых полей:

{IF {MERGEFIELD Prefix}<>"" "{MERGEFIELD Prefix} "}
{IF {MERGEFIELD FirstName}<>"" "{MERGEFIELD FirstName} "}
{IF {MERGEFIELD LastName}<>"" "{MERGEFIELD LastName}"} 

Чтобы ввести символы поля ({}), выберите «Поле» в меню «Вставка» (или нажмите CTRL + F9).

ПРИМЕЧАНИЕ. Вы создаете свой CSV, выгружая данные из informix и заменяя разделитель канала запятыми? ... может быть, вам лучше создать отчет ace, который может лучше манипулировать строками для создания файла CSV! Вот пример отчета, который я использую для достижения аналогичной цели:

database pawnshop end

define
variable act integer
variable actven integer
variable ret integer
variable ven integer
variable cmp integer
variable plt integer
variable vta integer
variable tot integer
variable totprof integer
end


output
top margin 0
bottom margin 0
left margin 0
right margin 384 
report to "clientes.unl"
page length 200000
end


select
       pa_serial,
       pa_code,
       pa_store_id,
       pa_user_id,
       pa_cust_name,
       pa_id_type,
       pa_id_no,
       pa_dob,
       pa_address1,
       pa_city,
       pa_tel,
       pa_cmt,
       pa_entry_date,
       pa_last_date,
       pa_idioma,
       pa_apodo,
       pwd_id,
       pwd_trx_type,
       pwd_last_type,
       pwd_last_pymt,
       pwd_trx_date,
       pwd_pawn_amt,
       pwd_last_amt,
       pwd_cob1,
       pwd_cob2,
       pwd_cob3,
       pwd_cob4,
       pwd_update_flag,
       st_code,
       st_exp_days,
       st_com_exp,
       st_plat_exp 

  from CLIENTES, outer BOLETOS, storetab
 where pa_serial = pwd_id
   and pa_code = st_code
 order by pa_cust_name, pwd_last_pymt

end



format

on every row

if pwd_last_type = "E" then
begin
let act = act + 1
if today - pwd_last_pymt >= st_exp_days then
let actven = actven + 1
end


if pwd_last_type = "I" then
begin
let act = act + 1
if today - pwd_last_pymt >= st_exp_days then
let actven = actven + 1
end


if pwd_trx_type = "C" then
begin
let cmp = cmp + 1
if pwd_last_type = "C" and (today - pwd_last_pymt >= st_com_exp) then
let actven = actven + 1
end


if pwd_last_type = "R" then
begin
let ret = ret + 1
end


if pwd_trx_type = "P" and pwd_last_type = "P" then
begin
let plt = plt + 1
if today - pwd_last_pymt >= st_plat_exp then
let actven = actven + 1

end


if pwd_trx_type = "E" and pwd_last_type = "F" then
begin
let ven = ven + 1
end

if pwd_trx_type = "P" and pwd_last_type = "F" then
begin
let ven = ven + 1
end


if pwd_trx_type = "E" and pwd_last_type = "T" then
begin
let ven = ven + 1
end

if pwd_trx_type = "P" and pwd_last_type = "T" then
begin
let ven = ven + 1
end


before group of pa_cust_name
let totprof = 0
let tot = 0
let act = 0
let actven = 0
let ret = 0
let ven = 0
let cmp = 0
let plt = 0
let vta = 0


after group of pa_cust_name

print column 1, pa_serial using "<<<<<","|",
                pa_code clipped,"|",
                pa_store_id clipped,"|",
                pa_user_id clipped,"|",
                pa_cust_name clipped,"|",
                pa_id_type clipped,"|",
                pa_id_no clipped,"|",
                pa_dob using "mm-dd-yyyy","|",
                pa_address1 clipped,"|",
                pa_city clipped,"|",
                pa_tel clipped,"|",
                pa_cmt clipped,"|",
                pa_entry_date using "mm-dd-yyyy","|",
                pwd_last_pymt using "mm-dd-yyyy","|",
                act using "&&&","|",
                ret using "&&&","|",
                ven using "&&&","|",
                tot using "&&&","|",
                totprof using "-&&&&&","|",
                actven using "&&&","|",
                cmp using "&&&","|",
                pa_idioma,"|",
                pa_apodo,"|",
                plt using "&&&","|",
                vta using "&&&","|"
end
0 голосов
/ 28 апреля 2011

Мы решили проблему, изменив строки:

{ IF { MERGEFIELD PRNT1040} = "Y" "Write some text, then use a return line here " "" }

Затем мы поставили эти правила обратно, вместо того, чтобы ставить разрывы после каждого правила внутри диалогового окна - дляПо какой-то причине Word анализирует разрыв строки после того, как вы закончите проходить правила IF -> THEN -> ELSE, включенные в параметры слияния Word.

...