邮件合并就不介绍了,百度就好。
一对多邮件合并什么意思呢?
我们知道一般的邮件合并,是excel里面的一行,对应word里的一页,但有时我们需要excel里的多行,填充到word里的一页,具体操作见这个专栏
H Howard:WORD自动化——一对多列表式邮件合并zhuanlan.zhihu.com看一下关键的域代码
- {set a { mergefield 辅助列 }}
- {nextif { mergefield 辅助列} = 1}
- {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 课程编号 }}