1、在 Excel 中设计试卷生成系统 作为一名教师,经常要经历考试、出卷这个过程。虽然“无纸 化” 考试已 经开始被大家所了解,但真正实现的学校却不多。作 为一名信息技术教师,我希望能够利用计算机开发出一套简单实 用、可以自动生成试卷的系统,把大家从繁琐的出卷过程中解放 出来。考虑到试卷要 打印出来,我没有选择,而是选择了大家都很熟悉的 ,利用其中的脚本语言来实现试卷的自动生成。 系统实现的功能 1. 组 卷方式为章节控制方式。保 证各章节 的分值不易失衡,根据 出题者的要求,按章节随机从题库中抽题组卷。 2.格式化试卷(包括设置试卷标题、进行页面设计、添加页眉等), 达到可以直接打印的要求。
2、3.题库中试题内容与参考答案融为一体,由系统生成的试卷文档 既可以打印出学生考试用卷,也可以打印出样卷。 构建题库 该系统题库采用 Excel 表格的形式,字段名分别为“ 标准答案”、 “题干”、“答案 A”、“答案 B”、“答案 C”、“答案 D”(如图 1)。题库 中的记录可以采用两种方法来录入: 1. 直接手工 录入:打开工作簿,在 题库工作表中可以直接输入题 目; 2. 从已有题库文件中导入到 Excel 题库里面,比如可以从现成 的 Access 题库中直接 导入到该题库里。 但是无论哪种方法都必须满足下面的条件:所有的题目按章节排 序,并记录每一章节题目的起始位置,以后向题库里面添
3、加记录 时不能在文件尾追加,而是要放到所属章节的位置,并修正试卷 生成界面里相应的地方。 建立试卷生成界面 所谓试卷生成界面就是系统提供给用户的用于输入各种条件值 的地方,本系统是由用户设定各章节所出题目的个数,因此界面 比较简单。我们把工作簿中的 Sheet3 工作表设计为系统界面(如 图 2)。在该界面下用户只要在 B 列相应单元格中输入每个章节 的题目数(例如,第一、二章都出 10 个题,就在 B1、B2 单元格里 分别输入 10,没有出题的章节后面可以为空白,如图 2 所示), 然后按“Ctrl+D”组合键执行宏命令就可以生成 试卷。其中此界面 除 B 列外其余各列都设置为保护状态,以
4、避免用户的误操作影 响程序的执行。在图 2 中我们还可以看到 D、F 列标明了题库中 每一章题目的起始位置,这里的设置是在完成题库后根据题库内 容来填写,一般只填写一次,如果题库的内容有变化,一定要在 此处作相应的改变。 生成试卷 生成试卷是本系统的核心部分,这部分的设计主要是采用 Excel 里面的宏命令。其中的关键代码主要是自己编制的,有些辅助功 能采用录制宏的方法实现。本系统的组卷方式为按照各章节要求 的题目数自动随机组卷,所以核心代码部分为三个方面:按照用 户要求产生符合要求的随机数,并把该数存储于一个数组中,产 生的随机数就是选中题目的序号;按要求把所选记录复制到 Sheet2 工作
5、表中,并转换成我们常见的试卷模式;格式化试卷。 生成随机数 本系统中的随机数主要是标志出现在试卷中题库记录的位置,例 如我们随机产生了一个数 99,表示题库中第 99 条记录是我们试 卷中的一个题目。关于随机数的要求:一是生成的数必须不能重 复,这样就避免试卷中重题的出现;二是生成的数必须在给定的 范围里产生,如图 2 所示要求,第一章的题目范围是 1117,所 以我们产生的 10 个随机数必须是在 1117 之间的不能重复的 数。具体实现代码如下: 产 生一定范 围的随机数我 们用 RND()函数,我们把产生的这 个函数赋予临时变量 j,其中的 fanwei(1,1),fanwei(1,2)
6、为图 2 中 D、F 列中相应值。 j = Int(Rnd() * (fanwei(l, 2) - fanwei(l, 1) + 1) + fanwei(l, 1) 产 生不重复的随机数。我们采用的方法是用新产生的数和前 面产生的数分别比较,如果不同就直接记入数组 id(),如果有相 同的话重新再生成,然后再比较,如此循环。 For i = 1 To timu(l) a:j = Int(Rnd() * (fanwei(l, 2) - fanwei(l, 1) + 1) + fanwei(l, 1) id(i) = j 避免产生重复的随机数 For k = 1 To i - 1 If j = i
7、d(k) Then GoTo a: Else id(i) = j End If Next k 按产生的随机序列组卷 上述第一步中我们已经选择好了试卷的题目,这里需要做的就是 把选择好的题目复制到 Sheet2 工作表中并转换成我们常见试卷 的样式,这里我们采用循环的方式,先是按顺序把题目从题库中 复制到 Sheet2 工作表中,然后把选项 A、B、C、D 分别放在不同 的行上,重复这个过程直到完成。 复制 记录 到 Sheet2 中 Range(Cells(id1(i), 1), Cells(id1(i), 6).Select Selection.Copy Sheets(“Sheet2“).S
8、elect Range(Cells(i, 1), Cells(i, 1).Select ActiveSheet.Paste 转换 成为 我们常见试 卷的样式 Range(Cells(i, 3), Cells(i, 3).Select Application.CutCopyMode = False Selection.Cut Destination:=Range(Cells(i + 1, 2), Cells(i + 1, 2) Range(Cells(i, 4), Cells(i, 4).Select Selection.Cut Destination:=Range(Cells(i + 2, 2
9、), Cells(i + 2, 2) Range(Cells(i, 5), Cells(i, 5).Select Selection.Cut Destination:=Range(Cells(i + 3, 2), Cells(i + 3, 2) Range(Cells(i, 6), Cells(i, 6).Select Selection.Cut Destination:=Range(Cells(i + 4, 2), Cells(i + 4, 2) Range(Cells(i + 4, 2), Cells(i + 4, 2).Select 格式化试卷 添加 试卷 标题并设 置标题的字体字号和样
10、式 Range(“A1:B1“).Select ActiveCell.FormulaR1C1 = “200 -200 学年度信息技术期末考试“ With ActiveCell.Characters(Start:=1, Length:=20).Font .Name = “宋体“ .FontStyle = “加粗“ .Size = 24 进 行页面 设置 纸张类型:.PaperSize = xlPaperB4 上、下、左、右边距: ActiveSheet.PageSetup.PrintArea = “ With ActiveSheet.PageSetup .LeftHeader = “ .Cent
11、erHeader = “ .RightHeader = “ .LeftFooter = “ .CenterFooter = “ .RightFooter = “ 添加 页脚 ActiveSheet.PageSetup.PrintArea = “ With ActiveSheet.PageSetup .CenterFooter = “第 &P 页,共 &N 页 “ 至此本系统的主要内容已经制作完成。生成试卷的操作非常简单, 我们只要在 Sheet3 工作表中输入条件值,然后按“Ctrl+d”执行即 可。最后生成的试卷如图 3 所示。本系统在 Windows 98+Excel 2000 下调试通过。 (河北唐山师范学院玉田分校 于得海)