分享

使用Office Word和Excel打印成绩通知单和成绩条

 趙衍德 2010-01-23
使用Office Word和Excel打印成绩通知单和成绩条
 

  每到期末,班主任或者辅导员就要开始收集学生的各科成绩,统计总分,计算名次等。然后就要开始打印每个学生的成绩通知单,装入信封,寄给家长。最原始的做法当然是找两个动作麻利的班干部,在打印好的表格里填上成绩,再装入信封。这样,直到把全班几十个同学的成绩通知单都处理好时,已经是腰酸背痛,手腕麻木了。——既然有 microsoft office 为什么还要这样折磨人呢?

  成绩通知通常有两种形式,一种是“成绩通知单”的形式,即每页纸一个成绩,还附加一些关于本学期和下学期的信息,如报名时间、费用等,如图1所示:

 


图 1

  成绩通知的另一种形式是“成绩通知条”,即仅仅在一张小纸条上,填写了学生成绩,如图2所示:

 


图 2

  下面,我们就开始一步步制作成绩通知单(条)。首先来看看必需的数据,即成绩。它存放在一个名为“成绩.xls”的 excel 文档的“成绩”工作表中,如图3所示:

 


图 3

 

制作成绩通知单

  根据任务的特点,不难想到使用 word 的“邮件合并”。

  邮件合并功能需要两个文档,即数据源和模板文档。数据源通常可以是word表格、excel 表格以及数据库表格等,这里就用我们上面提到的那个存放数据的 excel 作为数据源。模板文档当然需要在 word 里新建了。现在我们来一步一步的准备成绩通知单吧(注:本文以 office 2003 为例,其余版本的 office 中操作类似,可能略有不同):

  第一步,新建一个 word 文档,打开“邮件合并”工具栏(右键单击 word 工具栏,在弹出菜单中选择“邮件合并”)。点击工具栏最左边的(设置文档类型)按钮设置主文档类型,即在弹出的对话框中选择“信函”。

  第二步,在“邮件合并”工具栏上点击(打开数据源)按钮,选择我们准备好的“成绩.xls”为作数据源。在这一步中请注意,如果“成绩.xls”中有多个工作表,请选择正确的工作表作为数据源。在 word 2000 中,没有提供对工作表的选择对话框,那么请把数据表移到 excel 文档中的第一个工作表位置。

  第三步,撰写模板文档内容,并在适当的位置插入正确的“域”。比如,先写好“学号:总分:排名:”,再将光标移动到“学号:”之后,单击“邮件合并”工具栏上的(插入域)按钮,打开如图4所示的“插入合并域”对话框。注意对话框中已经根据数据源列出了所有的域名,即图3所示 excel 表格中的第一行。这里选择学号。同样,依次将光标移动到“总分:”和“排名:”之后,分别插入相应的“总分”域和“排名”域。完成的模板如图5所示:

 


图 4

 


图 5

  插入合并域的时候,如果需要控制格式,可以直接在合并域上进行格式操作,如图5中给“姓名”加下划线。但是一定要注意一点,域是一个整体(如果将文本光标移动到某个域上,整个域的背景都会变成灰色,以便区分),所以,无论做什么操作,都要把域作为一个整体来考虑;更不要手工去修改域的名字,虽然这样做时不会报错,但这样做不仅没有意义的,反而会把事情弄糟。

  模板文档完成了,不妨先看看实际效果。单击“邮件合并”工具栏上的(查看合并数据)按钮,此时文档中的域都会替换成数据源中的数据,至于是替换成那一条数据,则是由工具栏上的这组按钮决定的。

  最后核对无误之后,使用“邮件合并”工具栏上的(合并到新文档;合并到打印机)两个按钮中一个来进行合并。这里我们可以选用“合并到新文档”按钮看看合并的结果,如图6所示。最后只需要打印这个文档再分别装入信封即可。

 


图 6

 

制作成绩通知条

  制作成绩通知条完全可以使用和制作成绩通知单相同的办法,即邮件合并。只不过合并类型选择为“目录”,而不是“信函”。但是既然只需要用 excel 就成解决,何必再去麻烦 word 呢。

  实现成绩通知条,其难点在于给每一条数据都要加上表头,如果能有空格分隔便于裁切就更好。如果我们新建一个工作表,根据当前的行数引用“成绩”表中不同的行,那问题就能很好的解决了。原理说起来似乎有些复杂,所以请先跟着我做,之后再容我慢慢解释。

  在“成绩.xls”中新建一个工作表,命名为“成绩通知”。在“成绩通知”工作表的“a1”单元格中输入如下工式:

=if(mod(row(),3)=1,成绩!a$1,if(mod(row(),3)=2,offset(成绩!a$1,row()/3+1,0),""))

  输入公式并回车后,再次选中“a1”单元格式,向右拖动选中符号右下角的小方块进行填充,直到将“成绩”工作表中第一行的数据完全复制过来为止。本例中拖动到“k1”单元格。然后再选中“a1:k1”这些单元格,向下拖动选中符号右下角的小方块进行填充,直到第29行。

  最后结果如图7所示。将这个表格打印出来,裁切分装即可。


图 7

  现在来说说为什么要这样做。

  当然首要的是解释那个公式的意思,我们先把公式中的两个if语句标记出来:

=if(mod(row(),3)=1,成绩!a$1,if(mod(row(),3)=2,offset(成绩!a$1,row()/3+1,0),""))

  可以看出,第一个if语句(标记为红色)中,“mod(row(),3)=1”是条件。当条件成立时,结果为“成绩!a$1”;条件不成立时,结果由第二个if语句决定。这个if语句的意思是,当前行号(由row()返回)除以3的余数为1的时候,本单元格的内容就是“成绩”表a1的内容;否则,其内容由第二个if语句决定。

  第二个if语句(标记为蓝色)中,“mod(row(),3)=2”是条件。条件成立时,结果为“offset(成绩!a$1,row()/3+1,0)”取得的值;条件不成立时,结果为空白。其中“offset(成绩!a$1,row()/3+1,0)”表示,从“成绩”表的a1往下数第row()/3+1行处的单元格的值。这个if语句的意思就是,如果当前行号除以3的余数为2的时候,本单元格的内容是“成绩”表a列1+row()/3+1行处的值;否则,其值为空白(用于产生空行作为分隔)。

  所以,整个公式就是根据当前行号计算出来应该引用“成绩”表中表头、对应行数据还是空白。而后之所以要复制29行是因为原来10行数据,每行数据在“成绩通知”表中都是3行,即表头、数据和空白,这样就是10*3=30行,因为最后一条数据的空白可以不要,所以是30-1=29行。

  注意公式中的行号都是使用的绝对引用,因为所有内容的引用位置都是以“成绩”表的第一行为基础进行计算的。

 

结束语

  这样制作成绩通知单(条)是不是自动化多了?而且大大提高了效率,值得推广。同样的原理,公司或者机关里发放的工资对帐单(条),也可以使用这个办法,以减轻工作量,赶快试试吧!

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多