![7c8dc9b26dcdad23f24cfa46d55e145d.png](https://img-blog.csdnimg.cn/img_convert/7c8dc9b26dcdad23f24cfa46d55e145d.png)
记录一下办公自动化方面的内容。
要一次性制作大量的同类文档(比如调查报告、审查报告、通知书、合同、信函等),最方便的做法是,做一个Word模板,将不变的内容固定下来,需要变动的内容(比如借款人的各种信息)放在Excel表里。用Word自带的邮件合并功能,批量生成文档。
对于一个收件人一条记录,生成一个文档,这种邮件合并是最简单的。然而,有时候一个收件人有多个记录(多笔贷款、多个合同号.......),普通的邮件合并无法实现,需要用到Word自动化利器之“域”。
金融信息敏感,还是以一个学校案例做示例(姓名如有雷同,纯属巧合哈)。
一个班级,有的学生科目考试挂了,需要重修,要填写一张重修申请表,通常是制作后学生签字。一个学生挂了好几科,需要把各个科目都列在一张通知单上面。下面是Excel文档和通知模板。
![b26d2d6a53c318dacc20161531f9a5bd.png](https://img-blog.csdnimg.cn/img_convert/b26d2d6a53c318dacc20161531f9a5bd.png)
![8c89ab1cd20f12b22b7586195099deb2.png](https://img-blog.csdnimg.cn/img_convert/8c89ab1cd20f12b22b7586195099deb2.png)
手工的做法是在Excel里面筛选,然后粘贴到Word。
那么几百个学生,就要忙活一阵了。
从Excel取数,填充到Word,自然想到用邮件合并来实现自动化。
按常规的邮件合并(普通版mailmerge步骤省略了,网上有太多教程),按照分布向导、选好Excel表,收件人列表,然后在姓名、课程编号、课程名称插入对应的字段:
![67d0cf5856c67a93ec5f8920b8d2b5e3.png](https://img-blog.csdnimg.cn/img_convert/67d0cf5856c67a93ec5f8920b8d2b5e3.png)
![68fbdf9c2b32226f5bc1f00899fa6ab3.png](https://img-blog.csdnimg.cn/img_convert/68fbdf9c2b32226f5bc1f00899fa6ab3.png)
![a4efafbae96a220b051db4ffbdbdeac7.png](https://img-blog.csdnimg.cn/img_convert/a4efafbae96a220b051db4ffbdbdeac7.png)
看看结果:
![9db437a1532d5bcdc09dd48a14ea585d.png](https://img-blog.csdnimg.cn/img_convert/9db437a1532d5bcdc09dd48a14ea585d.png)
这种方式,变成一行数据,一份申请表。一个学生挂科2门,要给同一个学生生成2张申请表,这不是我们希望的。我们希望,按学生制作申请表,一个学生一张。如果挂科2门,就列两行,而不是发两份。
邮件合并有个高级功能,在邮件合并——规则——下一记录条件,可以设置:
![4ee044922b2682959991e251a3fe20cb.png](https://img-blog.csdnimg.cn/img_convert/4ee044922b2682959991e251a3fe20cb.png)
为了设置条件,我们需要在表格做一些操作。
我们需要在Excel中增加一列,辅助列,表明哪些挂科记录属于新起一个学生的,哪些跟随上一个记录一起,计入上个学生。
按姓名排序,D列,录入公式。为1则后面记录追随,为0,后面新起。下面表中第2行,鲍同学,辅助列为1,表明下面一个记录还是属于鲍同学。第3行,辅助列为0,表明下一个记录不属于鲍同学,要新起一个文件了。
这里用到一个条件判断公式,自动填充全部D列。
![eb6e54cc5f8c5aa0b6542f699b8d73f7.png](https://img-blog.csdnimg.cn/img_convert/eb6e54cc5f8c5aa0b6542f699b8d73f7.png)
回到Word,第2行第1列,插入规则——条件
![d65f8f79b4caf4ce6a5ac5d6bda4eebe.png](https://img-blog.csdnimg.cn/img_convert/d65f8f79b4caf4ce6a5ac5d6bda4eebe.png)
如果仅仅这样,直挂了一科的学生,第2行就会和第1行一样,重复列报。
还要设置一个标签A,等于辅助列的值,增加一个判断语句,如果A不为0,才列报,否则,为空。第2行第2列,也是一样。
最终的到第2行,域代码。
![fa2ad711dd80e6d50b418db94bbb5207.png](https://img-blog.csdnimg.cn/img_convert/fa2ad711dd80e6d50b418db94bbb5207.png)
怎么录入的?“Ctrl+F9”是输入域代码的快捷键,生成一个花括号,在里面输入 SET A ,在邮件合并菜单栏,插入 辅助列 。再次 “Ctrl+F9”,输入 IF A <> 0 ,插入 课程编号
![ef4a41c4e17494dcd350688b3d190f04.png](https://img-blog.csdnimg.cn/img_convert/ef4a41c4e17494dcd350688b3d190f04.png)
第3行——第9行呢?复制粘贴第2行内容即可。为何模板中要设置9行,因为最大挂科量是9,一个学生最多9行。
![8bc7b2188c5a8586ec5bc2408d859395.png](https://img-blog.csdnimg.cn/img_convert/8bc7b2188c5a8586ec5bc2408d859395.png)
完成邮件合并,看看效果
![f2b5c52f24d6d5c2efef3354af045c26.png](https://img-blog.csdnimg.cn/img_convert/f2b5c52f24d6d5c2efef3354af045c26.png)
挂1科的只有一行,挂2科的2行,Bingo。
手动操作起来还是挺复杂的,在Python中,也可以实现“从EXCEL取数,按规则填充到Word模板”,挖个坑,慢慢填。