#csv #ms-word #rules #conditional-statements #mailmerge
#csv #ms-word #Правила #условные операторы #mailmerge
Вопрос:
Я настраиваю файл слияния почты, который считывается из файла 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"
Вот пара строк файла слияния почты, который я пытаюсь (изображение связано, потому что копирование и вставка слияния почты не показывает исходный документ)
Кто-нибудь знает, как это обойти? Я попытался поместить SKIPIF
перед условными обозначениями, но это тоже не работает.
Ответ №1:
Следующее условное поле 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! вот пример отчета ace, который я использую для достижения аналогичной цели:
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 "amp;amp;amp;","|",
ret using "amp;amp;amp;","|",
ven using "amp;amp;amp;","|",
tot using "amp;amp;amp;","|",
totprof using "-amp;amp;amp;amp;amp;","|",
actven using "amp;amp;amp;","|",
cmp using "amp;amp;amp;","|",
pa_idioma,"|",
pa_apodo,"|",
plt using "amp;amp;amp;","|",
vta using "amp;amp;amp;","|"
end
Комментарии:
1. Спасибо, я попробую это сегодня. ACE не сможет выполнить требования здесь. это скрипт на perl, который записывает csv-файлы, создает файлы отката, регистрирует пользовательский ввод и пути к файлам и отправляет CSV-файлы по электронной почте исполнителю, чтобы он / она мог поместить данные в файл слияния почты
Ответ №2:
Проще всего было бы пропустить раздел ‘false’ в вашем условии IF.
Просто напишите истинную часть
IF MERGEFIELD = "Y" "true section"
Поскольку вы включили раздел false, он (я думаю) учтет
Ответ №3:
Мы решили проблему, изменив строки:
{ IF { MERGEFIELD PRNT1040} = "Y" "Write some text, then use a return line here
" "" }
Затем мы помещаем эти правила вплотную друг к другу вместо того, чтобы помещать разрывы строк после каждого правила внутри диалогового окна — по какой-то причине Word анализирует разрыв строки после того, как вы закончите просмотр правил IF -> THEN -> ELSE, включенных в параметры слияния почты word.