sqlserver多行合并成一行_一对多邮件合并——域代码的解释

邮件合并就不介绍了,百度就好。

一对多邮件合并什么意思呢?

我们知道一般的邮件合并,是excel里面的一行,对应word里的一页,但有时我们需要excel里的多行,填充到word里的一页,具体操作见这个专栏

H Howard:WORD自动化——一对多列表式邮件合并​zhuanlan.zhihu.com
2b31457a5103552da752373b19d15d7b.png

看一下关键的域代码

  1. {set a { mergefield 辅助列 }}
  2. {nextif { mergefield 辅助列} = 1}
  3. {IF a = 1 { mergefield 课程编号 }}

先看第2个,nextif 的作用是,如果它的表达式为真,则用excel里的下一行记录,填充word里从它开始的本行 的合并域,(从它开始的意思是,nextif前面的域代码不会被下行填充,当然,他的表达式也不会被下行填充),如果为假,则仍然用本行记录填充word那行的合并域,这就造成了,如果仅仅

nextif { mergefield 辅助列} = 1} { mergefield 课程编号 }

在辅助列为0时,会重复填充课程编号。

为了避免重复,引入了 if


再看第三个

if的作用和excel公式里一致,

if a=1,甲,乙

如果a=1,则为甲,如果a是其他的数,则为乙

在公式里,如果a=1,则返回域代码{ mergefield 课程编号 },如果a不为1,则为空白

合起来

{nextif { mergefield 辅助列} = 1} {IF a = 1 { mergefield 课程编号 }}

  • 如果本行辅助列=1,则a=1为真,则用下行的值填充课程编号 ,
  • 如果本行辅助列=0,则a=1为假,用下行的值填充课程编号 ,但if判断假,返回空白

这样就避免了重复

在这里a是本行辅助列的值,为啥用a呢?为啥不能直接

nextif { mergefield 辅助列} = 1} { if {mergefield 辅助列} =1 {mergefield 课程编号} }

如果这样的话,当辅助列=1时,if 后面的域会被下行的辅助列值填充,下行如果为0,就会导致返回空白,这不是我们想要的结果,怎么办呢?引入set


set的意思是读取excel里的本行记录的指定的列,把他赋值给一个代号

{set a { mergefield 辅助列 }}

把辅助列里的值读出来,赋值给a。

这里我们用set,并把set放在了nextif前面,就避免了直接写域,被nextif用下行记录填充的错误,set先去读取本行的辅助列的值,把它存到标签里,后面if再去读标签,标签a的作用,类似于传递信息的信使。

这样的话,我们可以稍微简化这个代码

{set a { mergefield 辅助列 }} {nextif a = 1} {IF a = 1 { mergefield 课程编号 }}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值