張金沙++金笛++石劭紅
摘要:為打破成績錄入“瓶頸”,實(shí)現(xiàn)高效辦公,以Excel VBA為編程語言,結(jié)合某高校成績錄入的具體任務(wù),開發(fā)出將電子版學(xué)生成績自動(dòng)上傳到該校教務(wù)系統(tǒng)的微型配套系統(tǒng)。實(shí)際運(yùn)用結(jié)果表明,運(yùn)用VBA實(shí)現(xiàn)學(xué)生成績的自動(dòng)上傳,不僅快速準(zhǔn)確,而且高效實(shí)用,其方法值得學(xué)習(xí)和推廣。
關(guān)鍵詞:Excel;VBA;學(xué)生成績;自動(dòng)上傳;管理信息系統(tǒng)
中圖分類號(hào):TP312 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1009-3044(2016)32-0080-03
1 背景
Excel VBA(Visual Basic for Applications)是內(nèi)嵌于Excel的程序開發(fā)語言,在Excel中可運(yùn)行Visual Basic程序完成較復(fù)雜的工作,實(shí)現(xiàn)高效辦公[1,2]。當(dāng)然,作為一種功能強(qiáng)大的宏語言,通過編程也能實(shí)現(xiàn)對(duì)網(wǎng)頁的操控。
將學(xué)生的各項(xiàng)成績上傳學(xué)校教務(wù)管理信息系統(tǒng)是每個(gè)教師期末必須完成的工作。由于許多教務(wù)管理信息系統(tǒng)沒有提供批量導(dǎo)入成績的功能,老師們不得不將已經(jīng)整理好的電子成績,采取復(fù)制粘貼的方法,再次人工錄入相應(yīng)的網(wǎng)頁控件。工作重復(fù)低效,而且難免出錯(cuò)[3,4]。
為打破成績錄入“瓶頸”,實(shí)現(xiàn)了Excel電子成績的自動(dòng)快速準(zhǔn)確上傳,本文以某高校成績錄入為例,給出基于Excel VBA成績自動(dòng)上傳系統(tǒng)的詳細(xì)開發(fā)過程。
2 準(zhǔn)備工作
在編寫代碼前,需要熟悉成績錄入界面、手工操作過程和界面網(wǎng)頁元素的定位屬性。網(wǎng)頁元素的定位屬性(包括id、name和索引號(hào)等)的獲得,還需借助“網(wǎng)頁按鍵精靈”等工具。在“網(wǎng)頁按鍵精靈”中打開信息系統(tǒng)成績錄入界面后可獲得圖1結(jié)果,上面窗口顯示某高校教務(wù)管理信息系統(tǒng)的成績錄入主要界面,下面窗口顯示網(wǎng)頁元素分析結(jié)果。
圖1 成績錄入頁面元素分析
手工錄入時(shí),在成績錄入界面可依次輸入學(xué)號(hào)(也可根據(jù)姓名提示而省略本項(xiàng))、技能、平時(shí)、期末和總評(píng)成績,點(diǎn)擊“添加記錄”,若信息系統(tǒng)存在此學(xué)號(hào),該生成績?nèi)霂?,同時(shí)顯示在界面下半部的成績表中。編程就是模擬這個(gè)人工過程。
獲取網(wǎng)頁元素屬性,只需點(diǎn)擊要觀察的網(wǎng)頁元素,其詳細(xì)分析結(jié)果便顯示在下面窗口。本系統(tǒng)根據(jù)ID屬性定位,從圖1可見,點(diǎn)擊學(xué)號(hào)后,顯示的ID屬性為txtXh。同樣操作,獲得技能、平時(shí)、期末、總評(píng)和添加記錄的ID屬性分別為txtJncj、txtPscj、txtQmcj、txtCjInsert和btAdd。
3 界面設(shè)計(jì)
打開Excel,在Sheet1的A列至G列的首行輸入“序號(hào)”、“姓名”、“學(xué)號(hào)”等信息,其中前二列為校驗(yàn)信息,后五列為要上傳的信息。將H列至L列合并,插入藝術(shù)字“成績自動(dòng)上傳”。在工作表中繪制一個(gè)圓角矩形,分別設(shè)置填充效果和陰影,復(fù)制粘貼成三個(gè)并添加文字作為菜單。最后將Sheet1命名為“主界面”,將其他表單刪除,以文件名為“成績自動(dòng)上傳”保存。見圖2。
圖2 成績自動(dòng)上傳主界面
4 代碼編寫與錄入
4.1 操作說明模塊
本模塊顯示一個(gè)消息框,為教師提供操作指導(dǎo)。
Sub Opguide()
Dim msg As String
msg = "1.按本表A-H列的格式組織數(shù)據(jù),首行為標(biāo)目。" & vbNewLine
msg = msg + "2.確認(rèn)學(xué)?!俺煽冧浫搿表撁娴暮戏ㄊ跈?quán)打開。" & vbCrLf
msg = msg + "3.點(diǎn)擊“數(shù)據(jù)檢查”,通過后再點(diǎn)“成績導(dǎo)入”。"
MsgBox msg, vbOKOnly, "操作指南"
End Sub
4.2 數(shù)據(jù)檢查模塊
數(shù)據(jù)檢查模塊分別檢查學(xué)號(hào)和成績的合法性。
Public dataflag As Boolean '數(shù)據(jù)檢查通過標(biāo)志
Public maxrow As Integer '數(shù)據(jù)的最大行數(shù)
Sub Datacheck()
Dim i As Integer, j As Integer
Range("C1").Select 'C列為學(xué)號(hào)
maxrow = Range("C65536").End(xlUp).Row '取得數(shù)據(jù)的最大行數(shù)
dataflag = True
'下面是學(xué)號(hào)合法性檢查
For i = 2 To maxrow '數(shù)據(jù)從第二行開始
If Len(Trim(Cells(i, 3))) = 8 Then '合法學(xué)號(hào)有8位
Cells(i, 3).Font.Color = vbBlack '合法學(xué)號(hào)標(biāo)記為黑色
Else
Cells(i, 3).Font.Color = vbRed '不合法學(xué)號(hào)標(biāo)記為紅色
dataflag = False
End If
Next
'下面檢查各項(xiàng)成績的合法性
For i = 2 To maxrow
For j = 4 To 7 '各項(xiàng)成績
If Cells(i, j) >= -1 And Cells(i, j) <= 100 Then '下限-1為缺考標(biāo)識(shí),0至100為考分
Cells(i, j).Font.Color = vbBlack '合法成績標(biāo)記為黑色
Else
Cells(i, j).Font.Color = vbRed '不合法成績標(biāo)記為紅色
dataflag = False
End If
Next
Next
If dataflag = False Then '數(shù)據(jù)檢查沒有通過
MsgBox "數(shù)據(jù)檢查沒有通過,請(qǐng)修改后重新檢查!", vbOKOnly
Else
MsgBox "數(shù)據(jù)檢查通過,可以上傳成績!", vbOKOnly
End If
End Sub
4.3 成績上傳模塊
數(shù)據(jù)上傳網(wǎng)頁的實(shí)現(xiàn)方法雖然有較多[3,4,5],但大致分為兩步,首先尋找目標(biāo)瀏覽器窗口,以獲得操作句柄,然后利用句柄完成上傳工作。
Sub Autoupload()
Dim myshell as object, myshellwin as object, mywin as object,myDoc as Object
Dim i as integer
Dim aimflag As Boolean '目標(biāo)窗口標(biāo)志
If dataflag = False Then
MsgBox "數(shù)據(jù)檢查沒有通過,請(qǐng)修改后重新檢查!", vbOKOnly
ExitSub
End If
第一步,獲取操作句柄
aimflag = False
Set myshell = CreateObject("Shell.Application") '利用shell對(duì)象尋找目標(biāo)瀏覽器窗口
Set myshellwin = myshell.Windows '獲取全部桌面窗口
For Each mywin In myshellwin '遍歷窗口對(duì)象并賦值給mywin
If LCase(TypeName(mywin.document)) = "htmldocument" Then '若是瀏覽器窗口
If InStr(1, mywin.LocationName, "成績錄入", vbTextCompare) > 0 Then '找到窗口標(biāo)題名為"成績錄入"的IE窗口
MsgBox mywin.document.Title + "頁面已打開,上傳開始。"
aimflag = True
Set myDoc = mywin.document '獲得操作句柄
End if
End if
If aimflag = False then
MsgBox "成績錄入頁面沒有打開,請(qǐng)打開后操作。"
Exit Sub
End if
' 第二步,成績上傳
For i = 2 To maxrow
myDoc.getElementsByID("txtXh"). Value =Trim(Cells(i, 3)) '在網(wǎng)頁學(xué)號(hào)處填入電子表格的學(xué)號(hào)(C列)
myDoc.getElementsByID("txtJncj").Value = Cells(i, 4) '填入技能成績
myDoc.getElementsByID("txtPscj").Value = Cells(i, 5) '填入平時(shí)成績
myDoc.getElementsByID("txtQmcj").Value = Cells(i, 6) '填入期末成績
myDoc.getElementsByID("txtCjInsert").Value = Cells(i, 7) '填入技能成績
myDoc.getElementsByID("btAdd").Click '點(diǎn)擊添加記錄
Do While mywin.Busy '等待刷新結(jié)束
Application.Wait (Now + TimeValue("0:00:01"))
DoEvents
Loop
Next
Set myshell = Nothing ' 釋放對(duì)象
Set myshellwin = Nothing
Set mywin = Nothing
Set mydoc = Nothing
End Sub
4.4 代碼的錄入及與菜單關(guān)聯(lián)
在Excel中,按快捷鍵Alt和F11,進(jìn)入VBA編緝器。點(diǎn)擊“插入-模塊”,模塊1便出現(xiàn)在工程中。在模塊1錄入操作說明過程Opguide()、數(shù)據(jù)檢查過程Datacheck()及成績上傳過程Autoupload(),保存,退出VBA編緝器。
在Excel下,右擊菜單“操作說明”-“指定宏”-“Opguide”-“確定”,完成操作說明過程Opguide()代碼與菜單“操作說明”的關(guān)聯(lián)。進(jìn)行相似的操作,完成其它過程代碼與菜單的關(guān)聯(lián)。
5 結(jié)束語
本系統(tǒng)基于Excel VBA完美實(shí)現(xiàn)電子成績的自動(dòng)上傳,實(shí)際運(yùn)用結(jié)果表速度很快,在網(wǎng)絡(luò)正常的情況下,一分鐘內(nèi)即可完成一個(gè)班(約60人)的學(xué)生成績上傳工作,且設(shè)計(jì)相對(duì)簡單,操作十分方便,表現(xiàn)出很好的便捷性和實(shí)用性[5]。Excel是辦公室數(shù)據(jù)處理的常用軟件,VB是非專業(yè)人員常用的計(jì)算機(jī)語言,只要掌握了VB,VBA就能很快上手,因而運(yùn)用VBA開發(fā)的系統(tǒng)具有良好的可普及性和較高的推廣實(shí)用價(jià)值。
參考文獻(xiàn):
[1] 許小榮, 夏躍偉, 高翔, 等. Excel VBA語法與應(yīng)用手冊(cè)[M]. 北京: 電子工業(yè)出版社, 2010.
[2] 焦萍萍, 周顯春. EXCEL中的VBA程序設(shè)計(jì)[J]. 電腦知識(shí)與技術(shù), 2016, 12(11): 63-64.
[3] 劉松. 一種快速將本地教學(xué)數(shù)據(jù)上傳到網(wǎng)絡(luò)教學(xué)系統(tǒng)的方法[J]. 智能計(jì)算機(jī)與應(yīng)用, 2013, 3(3): 93-94, 封3.
[4] 江治. 利用VBA實(shí)現(xiàn)網(wǎng)頁中自動(dòng)錄入成績[J]. 安慶師范學(xué)院學(xué)報(bào):自然科學(xué)版, 2010, 16(3): 124-127.
[5] 張正. 表單批量自動(dòng)填寫系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J]. 計(jì)算機(jī)與現(xiàn)代化, 2013(2): 169-172.