何 劍
(揚(yáng)州職業(yè)大學(xué) 師范學(xué)院,江蘇 揚(yáng)州 225000)
基于AutoIt3和VBA的Access操作題的批量批改自動(dòng)化
何 劍
(揚(yáng)州職業(yè)大學(xué) 師范學(xué)院,江蘇 揚(yáng)州 225000)
為了幫助教師及時(shí)、準(zhǔn)確的批改大量Access操作題作業(yè)或試卷,基于AutoIt3和VBA,設(shè)計(jì)了一種針對(duì)Access操作題的自動(dòng)批量批改程序框架。首先依據(jù)Access操作技能考核要求對(duì)Access操作題各小題劃分評(píng)分點(diǎn)和對(duì)應(yīng)分值,然后應(yīng)用VBA實(shí)現(xiàn)單份Access操作題的自動(dòng)批改程序,最后應(yīng)用AutoIt3實(shí)現(xiàn)多份Access操作題的批量批改自動(dòng)化。實(shí)際運(yùn)行結(jié)果表明,該程序框架可以顯著提高批改效率和批改質(zhì)量。
應(yīng)用程序自動(dòng)化;AutoIt3;VBA;Access操作題;批量批改自動(dòng)化
在計(jì)算機(jī)信息技術(shù)課程的實(shí)驗(yàn)教學(xué)中,為了切實(shí)提高學(xué)生實(shí)際操作Access的技能水平,要求教師在短時(shí)間內(nèi)人工重復(fù)批改大量的Access操作題作業(yè)或試卷并給出準(zhǔn)確的批改反饋。為幫助教師提高批改效率和批改質(zhì)量,本文基于應(yīng)用程序自動(dòng)化語言——AutoIt3和VBA,提出一種Access操作題自動(dòng)批量批改程序框架,然后,以一道Access操作題為例,實(shí)際應(yīng)用該程序框架,分步具體實(shí)現(xiàn)該道Access操作題的自動(dòng)批量批改程序。
應(yīng)用程序自動(dòng)化,主要指應(yīng)用軟件的操作自動(dòng)化,旨在代替人工自動(dòng)實(shí)施對(duì)應(yīng)用軟件的預(yù)定操作。AutoIt3是基于Windows平臺(tái)的應(yīng)用程序自動(dòng)化語言,它是一種免費(fèi)的BASIC風(fēng)格的腳本語言,被設(shè)計(jì)用來自動(dòng)化Windows圖形用戶界面和通用腳本編程[1];它組合使用模擬擊鍵、鼠標(biāo)移動(dòng)和窗口/控件操作,以一種其他語言不可能或不可靠完成的方式實(shí)現(xiàn)任務(wù)自動(dòng)化[1]。VBA[2]是主要寄生在Microsoft Office應(yīng)用軟件中的應(yīng)用程序自動(dòng)化語言,目的是擴(kuò)展Office程序功能、提高Office應(yīng)用效率。
學(xué)生作答同一Access操作題,無論采用何種操作方法(菜單、工具欄、快捷鍵、對(duì)話框等)、哪樣操作順序,最終的正確操作效果是一樣的,因此,應(yīng)該從操作效果入手來判斷該題是否操作正確。VBA具有寄生于Access數(shù)據(jù)庫文件中讀取各類對(duì)象的屬性,應(yīng)用VBA可實(shí)現(xiàn)對(duì)單份Access操作題的自動(dòng)批改,再結(jié)合AutoIt3按學(xué)號(hào)順序?qū)崿F(xiàn)對(duì)多份Access操作題的自動(dòng)批量批改。
本文設(shè)計(jì)的Access操作題自動(dòng)批量批改程序框架如圖1所示。特別注意,每打開一個(gè)Access數(shù)據(jù)庫文件,就會(huì)進(jìn)入該文件對(duì)應(yīng)的VBA編輯器窗口,創(chuàng)建Module1模塊,將用戶預(yù)先指定的Access操作題自動(dòng)批改宏代碼粘貼進(jìn)來、保存起來,然后執(zhí)行該宏過程,接著刪除Module1模塊,退出VBA編輯器窗口,關(guān)閉該文件。實(shí)際應(yīng)用中,用戶只需給出作業(yè)目錄(課程&班級(jí))、待批改的某Access文件名、某Access操作題自動(dòng)批改宏代碼3項(xiàng),即可基于該框架輕便、快速開發(fā)出具體某道Access操作題的自動(dòng)批量批改程序。
本文從大學(xué)計(jì)算機(jī)信息技術(shù)課程教材[3]中選取一道Access操作題。打開“test.mdb”數(shù)據(jù)庫,數(shù)據(jù)庫包括院系、學(xué)生、圖書和借閱表,按下列要求進(jìn)行操作:(1)基于學(xué)生、圖書及借閱表,查詢學(xué)號(hào)為“090030107”的學(xué)生所借閱的圖書,要求輸出學(xué)號(hào)、姓名、書編號(hào)、書名、作者,輸出結(jié)果保存為CX1;(2)基于圖書表,查詢收藏的各出版社圖書均價(jià),要求輸出出版社及均價(jià),輸出結(jié)果保存為CX2;(3)保存數(shù)據(jù)庫test.mdb。接下來以該題為例,基于上述程序框架,分步實(shí)現(xiàn)這道Access操作題的自動(dòng)批量批改程序。
圖1 Access操作題自動(dòng)批量批改程序框架Fig.1 Automatic batch correcting program framework for Access operation subject
2.1 Access操作題的評(píng)分點(diǎn)和對(duì)應(yīng)分值
依據(jù)Access操作技能考核要求對(duì)該Access操作題的每一小題劃分評(píng)分點(diǎn)和對(duì)應(yīng)分值。該題總分20分,若test.mdb不存在,則該題不得分;Access_01小題中,若CX1不存在,則該小題扣10分,只有CX1存在即Access_01_1正確,才可以判斷Access_01_2是否正確,同理,Access_02小題也是如此。下面列出Access操作題評(píng)分點(diǎn)及分值如表1所示。
2.2 Access操作題的自動(dòng)批改程序
針對(duì)該題,應(yīng)用Access[4]VBA和SQL[5]按評(píng)分點(diǎn)實(shí)現(xiàn)單份Access操作題的自動(dòng)批改程序。為方便調(diào)試及擴(kuò)展,建議在程序開始處創(chuàng)建文本文件以保存批改意見,在程序結(jié)束處彈出對(duì)話框以顯示該題成績。這里選取Access_AutoBatchCorrectReport_VBA.txt中Access_02小題的自動(dòng)批改宏代碼:
表1 Access操作題評(píng)分點(diǎn)及分值Table 1 Marking points and score of Access operation subject
MyStrSQL2 = "SELECT 圖書.出版社, Avg(圖書.價(jià)格) AS 均價(jià)" & 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語句有誤) -- [錯(cuò)誤]扣9分"
End If
Else
Print #1, "Access_02: 數(shù)據(jù)庫中沒有名為""CX2""的查詢定義 -- [錯(cuò)誤]扣10分"
End If
2.3 Access操作題的自動(dòng)批量批改程序
應(yīng)用AutoIt3[1]實(shí)現(xiàn)多份Access操作題的自動(dòng)批量批改程序,最終程序源文件是Access_AutoBatchCorrectReport.au3。程序文件清單如圖2所示。
圖2 程序文件清單Fig.2 Program files list
腳本文件Access_AutoBatchCorrectReport.au3詳細(xì)功能步驟有:
(1)準(zhǔn)備工作。設(shè)置作業(yè)目錄(課程&班級(jí))(如C:大學(xué)計(jì)算機(jī)信息技術(shù)2013英教班),設(shè)置待批改的某Access文件名(如test.mdb),新建Access操作題成績表文件(如大學(xué)計(jì)算機(jī)信息技術(shù)_2013英教班_成績.xls)。
(2)批量批改。按有效學(xué)號(hào)順序,依次進(jìn)入每一個(gè)學(xué)號(hào)文件夾XX,循環(huán)執(zhí)行以下幾步:(A)創(chuàng)建XX批改報(bào)告.txt;(B)查詢操作題中是否存在test.mdb,若存在,轉(zhuǎn)到C,若不存在,轉(zhuǎn)到D;(C)打開test.mdb,進(jìn)入VBA編輯器,插入Module1模塊,復(fù)制Access_AutoBatchCorrectReport_VBA.txt中的代碼到Module1模塊中粘貼、保存,形成Access_AutoBatchCorrectReport_VBA宏過程,運(yùn)行該宏過程,生成成績和批改意見,刪除Module1模塊,退出VBA編輯器,關(guān)閉test.mdb,取出該題成績,轉(zhuǎn)到E;(D)置該題成績?yōu)?,保存批改意見,轉(zhuǎn)到E;(E)將學(xué)號(hào)和成績格式化寫入Access操作題成績表文件。
(3)結(jié)束工作。刪除臨時(shí)文件,詢問是否自動(dòng)打開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("無標(biāo)題 - 記事本")
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操作題的自動(dòng)批量批改結(jié)果
以我校2013英教班28位學(xué)生所做Access操作題為素材(作業(yè)目錄如圖3所示),以安裝Windows XP SP2簡體中文版、MS Office 2003英文版
圖3 作業(yè)目錄Fig.3 Work directory
圖4 前3位學(xué)生的Access操作題成績Fig.4 The top three students's score for Access operation subject
圖5 第2位學(xué)生的批改報(bào)告Fig.5 The second student's correcting report
(默認(rèn)中文輸入法)的PC為程序運(yùn)行平臺(tái)。首先,設(shè)置*.mdb默認(rèn)關(guān)聯(lián)程序?yàn)镸icrosoft Office Access,調(diào)低Access宏安全性,之后,運(yùn)行Access_AutoBatchCorrectReport.exe,生成了所有學(xué)生的Access操作題成績(圖4截取前3位學(xué)生的成績作為示例)。此外,作業(yè)目錄下每個(gè)學(xué)號(hào)文件夾中生成了一個(gè)“XX批改報(bào)告.txt”(圖5選取第2位學(xué)生的批改報(bào)告作為示例)的文件。
應(yīng)用本文提出的這種Access操作題自動(dòng)批量批改程序框架,很容易實(shí)現(xiàn)具體某道Access操作題的批量批改自動(dòng)化。上述運(yùn)行結(jié)果顯示,多份同一Access操作題的自動(dòng)批量批改相比人工重復(fù)批改,耗時(shí)大大減少,效率大大提高,誤判率極低,反饋更準(zhǔn)確??梢灶A(yù)見,在需要及時(shí)、準(zhǔn)確批改大量Access操作題作業(yè)或試卷的場(chǎng)合,該程序框架將發(fā)揮很大作用。
[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] 孫華峰.信息技術(shù)實(shí)驗(yàn)指導(dǎo)[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相結(jié)合實(shí)現(xiàn)教師信息動(dòng)態(tài)查詢[J].桂林航天工業(yè)高等??茖W(xué)校學(xué)報(bào),2011,16(4):443-445.
(責(zé)任編輯:張英健)
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-),男,江蘇高郵人,講師,碩士,主要研究方向?yàn)橛?jì)算機(jī)程序設(shè)計(jì)、應(yīng)用程序自動(dòng)化、計(jì)算機(jī)輔助教育。
TP311.52
A
1671-5322(2014)03-0045-04