【问题标题】:How do I suppress blank lines in a Microsoft Word 2007 mail merge?如何在 Microsoft Word 2007 邮件合并中取消空白行?
【发布时间】:2012-10-26 18:54:51
【问题描述】:

我正在设置一个从 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 放在条件句前面,但这也不起作用。

【问题讨论】:

    标签: csv ms-word rules conditional-statements mailmerge


    【解决方案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)。

    注意:您是否通过从 informix 中卸载数据并用逗号替换管道分隔符来创建 csv?...也许您最好创建一个 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 "&&&","|",
                    ret using "&&&","|",
                    ven using "&&&","|",
                    tot using "&&&","|",
                    totprof using "-&&&&&","|",
                    actven using "&&&","|",
                    cmp using "&&&","|",
                    pa_idioma,"|",
                    pa_apodo,"|",
                    plt using "&&&","|",
                    vta using "&&&","|"
    end
    

    【讨论】:

    • 谢谢,我今天就试试这个。 ACE 将无法满足此处的要求。它是一个 perl 脚本,用于编写 csv 文件、创建回滚文件、记录用户输入和文件路径,并将 csv 文件通过电子邮件发送给执行者,以便他/她可以将数据推送到邮件合并文件中
    【解决方案2】:

    最简单的方法是跳过 IF 条件中的“假”部分。

    只写真实的部分

    IF MERGEFIELD = "Y" "true section"
    

    当您包含虚假部分时,它会(我认为)考虑到

    【讨论】:

      【解决方案3】:

      我们通过改行解决了这个问题:

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

      然后我们将这些规则背靠背放置,而不是在对话框中的每个规则之后放置换行符 - 出于某种原因,Word 会在您完成包含的 IF -> THEN -> ELSE 规则后解析换行符在 word 的邮件合并选项中。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多