基于AutoIt3和VBA的Access操作题的批量批改自动化
2014-07-24何剑
何 剑
(扬州职业大学 师范学院,江苏 扬州 225000)
基于AutoIt3和VBA的Access操作题的批量批改自动化
何 剑
(扬州职业大学 师范学院,江苏 扬州 225000)
为了帮助教师及时、准确的批改大量Access操作题作业或试卷,基于AutoIt3和VBA,设计了一种针对Access操作题的自动批量批改程序框架。首先依据Access操作技能考核要求对Access操作题各小题划分评分点和对应分值,然后应用VBA实现单份Access操作题的自动批改程序,最后应用AutoIt3实现多份Access操作题的批量批改自动化。实际运行结果表明,该程序框架可以显著提高批改效率和批改质量。
应用程序自动化;AutoIt3;VBA;Access操作题;批量批改自动化
在计算机信息技术课程的实验教学中,为了切实提高学生实际操作Access的技能水平,要求教师在短时间内人工重复批改大量的Access操作题作业或试卷并给出准确的批改反馈。为帮助教师提高批改效率和批改质量,本文基于应用程序自动化语言——AutoIt3和VBA,提出一种Access操作题自动批量批改程序框架,然后,以一道Access操作题为例,实际应用该程序框架,分步具体实现该道Access操作题的自动批量批改程序。
应用程序自动化,主要指应用软件的操作自动化,旨在代替人工自动实施对应用软件的预定操作。AutoIt3是基于Windows平台的应用程序自动化语言,它是一种免费的BASIC风格的脚本语言,被设计用来自动化Windows图形用户界面和通用脚本编程[1];它组合使用模拟击键、鼠标移动和窗口/控件操作,以一种其他语言不可能或不可靠完成的方式实现任务自动化[1]。VBA[2]是主要寄生在Microsoft Office应用软件中的应用程序自动化语言,目的是扩展Office程序功能、提高Office应用效率。
1 Access操作题自动批量批改程序设计
学生作答同一Access操作题,无论采用何种操作方法(菜单、工具栏、快捷键、对话框等)、哪样操作顺序,最终的正确操作效果是一样的,因此,应该从操作效果入手来判断该题是否操作正确。VBA具有寄生于Access数据库文件中读取各类对象的属性,应用VBA可实现对单份Access操作题的自动批改,再结合AutoIt3按学号顺序实现对多份Access操作题的自动批量批改。
本文设计的Access操作题自动批量批改程序框架如图1所示。特别注意,每打开一个Access数据库文件,就会进入该文件对应的VBA编辑器窗口,创建Module1模块,将用户预先指定的Access操作题自动批改宏代码粘贴进来、保存起来,然后执行该宏过程,接着删除Module1模块,退出VBA编辑器窗口,关闭该文件。实际应用中,用户只需给出作业目录(课程&班级)、待批改的某Access文件名、某Access操作题自动批改宏代码3项,即可基于该框架轻便、快速开发出具体某道Access操作题的自动批量批改程序。
2 Access操作题自动批量批改程序实现
本文从大学计算机信息技术课程教材[3]中选取一道Access操作题。打开“test.mdb”数据库,数据库包括院系、学生、图书和借阅表,按下列要求进行操作:(1)基于学生、图书及借阅表,查询学号为“090030107”的学生所借阅的图书,要求输出学号、姓名、书编号、书名、作者,输出结果保存为CX1;(2)基于图书表,查询收藏的各出版社图书均价,要求输出出版社及均价,输出结果保存为CX2;(3)保存数据库test.mdb。接下来以该题为例,基于上述程序框架,分步实现这道Access操作题的自动批量批改程序。
图1 Access操作题自动批量批改程序框架Fig.1 Automatic batch correcting program framework for Access operation subject
2.1 Access操作题的评分点和对应分值
依据Access操作技能考核要求对该Access操作题的每一小题划分评分点和对应分值。该题总分20分,若test.mdb不存在,则该题不得分;Access_01小题中,若CX1不存在,则该小题扣10分,只有CX1存在即Access_01_1正确,才可以判断Access_01_2是否正确,同理,Access_02小题也是如此。下面列出Access操作题评分点及分值如表1所示。
2.2 Access操作题的自动批改程序
针对该题,应用Access[4]VBA和SQL[5]按评分点实现单份Access操作题的自动批改程序。为方便调试及扩展,建议在程序开始处创建文本文件以保存批改意见,在程序结束处弹出对话框以显示该题成绩。这里选取Access_AutoBatchCorrectReport_VBA.txt中Access_02小题的自动批改宏代码:
表1 Access操作题评分点及分值Table 1 Marking points and score of Access operation subject
MyStrSQL2 = "SELECT 图书.出版社, Avg(图书.价格) AS 均价" & Chr(13) & Chr(10) & _
"FROM 图书" & Chr(13) & Chr(10) & _
"GROUP BY 图书.出版社;" & Chr(13) & Chr(10)
For i = 0 To MyDatabase.QueryDefs.Count - 1
If MyDatabase.QueryDefs(i).Name = "CX2" Then
Exit For
End If
Next i
If i < MyDatabase.QueryDefs.Count Then
access_score = access_score + 1#
If MyDatabase.QueryDefs(i).SQL = MyStrSQL2 Then
access_score = access_score + 9#
Else
Print #1, "Access_02_2 : ""CX2""查询定义不正确(SQL语句有误) -- [错误]扣9分"
End If
Else
Print #1, "Access_02: 数据库中没有名为""CX2""的查询定义 -- [错误]扣10分"
End If
2.3 Access操作题的自动批量批改程序
应用AutoIt3[1]实现多份Access操作题的自动批量批改程序,最终程序源文件是Access_AutoBatchCorrectReport.au3。程序文件清单如图2所示。
图2 程序文件清单Fig.2 Program files list
脚本文件Access_AutoBatchCorrectReport.au3详细功能步骤有:
(1)准备工作。设置作业目录(课程&班级)(如C:大学计算机信息技术2013英教班),设置待批改的某Access文件名(如test.mdb),新建Access操作题成绩表文件(如大学计算机信息技术_2013英教班_成绩.xls)。
(2)批量批改。按有效学号顺序,依次进入每一个学号文件夹XX,循环执行以下几步:(A)创建XX批改报告.txt;(B)查询操作题中是否存在test.mdb,若存在,转到C,若不存在,转到D;(C)打开test.mdb,进入VBA编辑器,插入Module1模块,复制Access_AutoBatchCorrectReport_VBA.txt中的代码到Module1模块中粘贴、保存,形成Access_AutoBatchCorrectReport_VBA宏过程,运行该宏过程,生成成绩和批改意见,删除Module1模块,退出VBA编辑器,关闭test.mdb,取出该题成绩,转到E;(D)置该题成绩为0,保存批改意见,转到E;(E)将学号和成绩格式化写入Access操作题成绩表文件。
(3)结束工作。删除临时文件,询问是否自动打开Access操作题成绩表文件。
限于篇幅,这里列出该脚本文件第2-C步骤功能代码:
$oAccessApp = ObjCreate("Access.Application")
$oAccessApp.Visible = 1
$oAccessApp.OpenCurrentDatabase($WorkPath & $DirName & "操作题" & $Mdb1_Name)
send("!{F11}")
WinWaitActive("Microsoft Visual Basic - " & StringLeft($Mdb1_Name, StringLen($Mdb1_Name)-StringLen(".mdb")))
send("!i")
send("{DOWN}")
send("{ENTER}")
WinWaitActive("Microsoft Visual Basic - " & StringLeft($Mdb1_Name, StringLen($Mdb1_Name)-StringLen(".mdb")) & " - [Module1 (Code)]")
run("notepad.exe")
WinWaitActive("无标题 - 记事本")
send("^o")
WinWaitActive("打开")
ControlFocus("打开", "文件名", 1148)
ControlSetText("打开", "文件名", 1148, @ScriptDir & "" & $AccessMacroName & ".txt")
send("{ENTER}")
WinWaitActive($AccessMacroName & ".txt - 记事本")
send("^{SPACE}")
send("^a")
send("^c")
WinActivate("Microsoft Visual Basic - " & StringLeft($Mdb1_Name, StringLen($Mdb1_Name)-StringLen(".mdb")) & " - [Module1 (Code)]")
send("^v")
send("^s")
WinWaitActive("Save As", "Module")
ControlClick("Save As", "Module", 1, "left", 1)
$oAccessApp.run($AccessMacroName)
send("!f")
send("{DOWN}")
send("{DOWN}")
send("{DOWN}")
send("{ENTER}")
WinWaitActive("Microsoft Visual Basic", "Do you want to export Module1 before removing it?")
send("!n")
send("!{F4}")
WinActivate($AccessMacroName & ".txt - 记事本")
WinClose($AccessMacroName & ".txt - 记事本")
$oAccessApp.Quit
2.4 Access操作题的自动批量批改结果
以我校2013英教班28位学生所做Access操作题为素材(作业目录如图3所示),以安装Windows XP SP2简体中文版、MS Office 2003英文版
图3 作业目录Fig.3 Work directory
图4 前3位学生的Access操作题成绩Fig.4 The top three students's score for Access operation subject
图5 第2位学生的批改报告Fig.5 The second student's correcting report
(默认中文输入法)的PC为程序运行平台。首先,设置*.mdb默认关联程序为Microsoft Office Access,调低Access宏安全性,之后,运行Access_AutoBatchCorrectReport.exe,生成了所有学生的Access操作题成绩(图4截取前3位学生的成绩作为示例)。此外,作业目录下每个学号文件夹中生成了一个“XX批改报告.txt”(图5选取第2位学生的批改报告作为示例)的文件。
3 结论
应用本文提出的这种Access操作题自动批量批改程序框架,很容易实现具体某道Access操作题的批量批改自动化。上述运行结果显示,多份同一Access操作题的自动批量批改相比人工重复批改,耗时大大减少,效率大大提高,误判率极低,反馈更准确。可以预见,在需要及时、准确批改大量Access操作题作业或试卷的场合,该程序框架将发挥很大作用。
[1] Jonathan Bennett.AutoItScript[EB/OL].(2014-01-22)[2014-02-01〗].http://www.autoitscript.com/site/autoit/.
[2] Microsoft Corporation.Microsoft Office 2003 Edition VBA Language Reference[M/OL].Microsoft Press,2004[2014-02-07].C:Program FilesMicrosoft OfficeOFFICE111033vbaof11.chm.
[3] 孙华峰.信息技术实验指导[M].北京:高等教育出版社,2013:173.
[4] Microsoft Corporation.Microsoft Access 2003 Language Reference[M/OL].Microsoft Press,2004[2014-02-11].C:Program FilesMicrosoft OfficeOFFICE111033vbaac10.chm.
[5] 李志梅.利用Access VBA和SQL相结合实现教师信息动态查询[J].桂林航天工业高等专科学校学报,2011,16(4):443-445.
(责任编辑:张英健)
Automation of Batch Correcting for Access Operation Subjects Based on AutoIt3 and VBA
HE Jian
(Teachers College of Yangzhou Polytechnic College, Yangzhou Jiangsu 225000, China)
In order to help teachers duly and accurately correct massive school assignments or examination papers of Access operation subjects, a kind of automatic batch correcting program framework for Access operation subjects is designed in this paper, which is based on AutoIt3 and VBA. Firstly, according to the checking requirements for Access operating skills, each marking point and the corresponding score for every subject of Access operation subjects is clearly divided. Then, the automatic correcting program for single Access operation subject is achieved by applying VBA. Finally, the automation of batch correcting for multiple Access operation subjects is implemented by applying AutoIt3. The actual executed result shows that the efficiency and quality of correction can be significantly improved through this program framework.
application automation; AutoIt3; VBA; Access operation subjects; automation of batch correcting
2014-03-22
何剑(1981-),男,江苏高邮人,讲师,硕士,主要研究方向为计算机程序设计、应用程序自动化、计算机辅助教育。
TP311.52
A
1671-5322(2014)03-0045-04