基于VBA成绩自动上传系统的开发
2017-03-17张金沙金笛石劭红
张金沙++金笛++石劭红
摘要:为打破成绩录入“瓶颈”,实现高效办公,以Excel VBA为编程语言,结合某高校成绩录入的具体任务,开发出将电子版学生成绩自动上传到该校教务系统的微型配套系统。实际运用结果表明,运用VBA实现学生成绩的自动上传,不仅快速准确,而且高效实用,其方法值得学习和推广。
关键词:Excel;VBA;学生成绩;自动上传;管理信息系统
中图分类号:TP312 文献标识码:A 文章编号:1009-3044(2016)32-0080-03
1 背景
Excel VBA(Visual Basic for Applications)是内嵌于Excel的程序开发语言,在Excel中可运行Visual Basic程序完成较复杂的工作,实现高效办公[1,2]。当然,作为一种功能强大的宏语言,通过编程也能实现对网页的操控。
将学生的各项成绩上传学校教务管理信息系统是每个教师期末必须完成的工作。由于许多教务管理信息系统没有提供批量导入成绩的功能,老师们不得不将已经整理好的电子成绩,采取复制粘贴的方法,再次人工录入相应的网页控件。工作重复低效,而且难免出错[3,4]。
为打破成绩录入“瓶颈”,实现了Excel电子成绩的自动快速准确上传,本文以某高校成绩录入为例,给出基于Excel VBA成绩自动上传系统的详细开发过程。
2 准备工作
在编写代码前,需要熟悉成绩录入界面、手工操作过程和界面网页元素的定位属性。网页元素的定位属性(包括id、name和索引号等)的获得,还需借助“网页按键精灵”等工具。在“网页按键精灵”中打开信息系统成绩录入界面后可获得图1结果,上面窗口显示某高校教务管理信息系统的成绩录入主要界面,下面窗口显示网页元素分析结果。
图1 成绩录入页面元素分析
手工录入时,在成绩录入界面可依次输入学号(也可根据姓名提示而省略本项)、技能、平时、期末和总评成绩,点击“添加记录”,若信息系统存在此学号,该生成绩入库,同时显示在界面下半部的成绩表中。编程就是模拟这个人工过程。
获取网页元素属性,只需点击要观察的网页元素,其详细分析结果便显示在下面窗口。本系统根据ID属性定位,从图1可见,点击学号后,显示的ID属性为txtXh。同样操作,获得技能、平时、期末、总评和添加记录的ID属性分别为txtJncj、txtPscj、txtQmcj、txtCjInsert和btAdd。
3 界面设计
打开Excel,在Sheet1的A列至G列的首行输入“序号”、“姓名”、“学号”等信息,其中前二列为校验信息,后五列为要上传的信息。将H列至L列合并,插入艺术字“成绩自动上传”。在工作表中绘制一个圆角矩形,分别设置填充效果和阴影,复制粘贴成三个并添加文字作为菜单。最后将Sheet1命名为“主界面”,将其他表单删除,以文件名为“成绩自动上传”保存。见图2。
图2 成绩自动上传主界面
4 代码编写与录入
4.1 操作说明模块
本模块显示一个消息框,为教师提供操作指导。
Sub Opguide()
Dim msg As String
msg = "1.按本表A-H列的格式组织数据,首行为标目。" & vbNewLine
msg = msg + "2.确认学校“成绩录入”页面的合法授权打开。" & vbCrLf
msg = msg + "3.点击“数据检查”,通过后再点“成绩导入”。"
MsgBox msg, vbOKOnly, "操作指南"
End Sub
4.2 数据检查模块
数据检查模块分别检查学号和成绩的合法性。
Public dataflag As Boolean '数据检查通过标志
Public maxrow As Integer '数据的最大行数
Sub Datacheck()
Dim i As Integer, j As Integer
Range("C1").Select 'C列为学号
maxrow = Range("C65536").End(xlUp).Row '取得数据的最大行数
dataflag = True
'下面是学号合法性检查
For i = 2 To maxrow '数据从第二行开始
If Len(Trim(Cells(i, 3))) = 8 Then '合法学号有8位
Cells(i, 3).Font.Color = vbBlack '合法学号标记为黑色
Else
Cells(i, 3).Font.Color = vbRed '不合法学号标记为红色
dataflag = False
End If
Next
'下面检查各项成绩的合法性
For i = 2 To maxrow
For j = 4 To 7 '各项成绩
If Cells(i, j) >= -1 And Cells(i, j) <= 100 Then '下限-1为缺考标识,0至100为考分
Cells(i, j).Font.Color = vbBlack '合法成绩标记为黑色
Else
Cells(i, j).Font.Color = vbRed '不合法成绩标记为红色
dataflag = False
End If
Next
Next
If dataflag = False Then '数据检查没有通过
MsgBox "数据检查没有通过,请修改后重新检查!", vbOKOnly
Else
MsgBox "数据检查通过,可以上传成绩!", vbOKOnly
End If
End Sub
4.3 成绩上传模块
数据上传网页的实现方法虽然有较多[3,4,5],但大致分为两步,首先寻找目标浏览器窗口,以获得操作句柄,然后利用句柄完成上传工作。
Sub Autoupload()
Dim myshell as object, myshellwin as object, mywin as object,myDoc as Object
Dim i as integer
Dim aimflag As Boolean '目标窗口标志
If dataflag = False Then
MsgBox "数据检查没有通过,请修改后重新检查!", vbOKOnly
ExitSub
End If
第一步,获取操作句柄
aimflag = False
Set myshell = CreateObject("Shell.Application") '利用shell对象寻找目标浏览器窗口
Set myshellwin = myshell.Windows '獲取全部桌面窗口
For Each mywin In myshellwin '遍历窗口对象并赋值给mywin
If LCase(TypeName(mywin.document)) = "htmldocument" Then '若是浏览器窗口
If InStr(1, mywin.LocationName, "成绩录入", vbTextCompare) > 0 Then '找到窗口标题名为"成绩录入"的IE窗口
MsgBox mywin.document.Title + "页面已打开,上传开始。"
aimflag = True
Set myDoc = mywin.document '获得操作句柄
End if
End if
If aimflag = False then
MsgBox "成绩录入页面没有打开,请打开后操作。"
Exit Sub
End if
' 第二步,成绩上传
For i = 2 To maxrow
myDoc.getElementsByID("txtXh"). Value =Trim(Cells(i, 3)) '在网页学号处填入电子表格的学号(C列)
myDoc.getElementsByID("txtJncj").Value = Cells(i, 4) '填入技能成绩
myDoc.getElementsByID("txtPscj").Value = Cells(i, 5) '填入平时成绩
myDoc.getElementsByID("txtQmcj").Value = Cells(i, 6) '填入期末成绩
myDoc.getElementsByID("txtCjInsert").Value = Cells(i, 7) '填入技能成绩
myDoc.getElementsByID("btAdd").Click '点击添加记录
Do While mywin.Busy '等待刷新结束
Application.Wait (Now + TimeValue("0:00:01"))
DoEvents
Loop
Next
Set myshell = Nothing ' 释放对象
Set myshellwin = Nothing
Set mywin = Nothing
Set mydoc = Nothing
End Sub
4.4 代码的录入及与菜单关联
在Excel中,按快捷键Alt和F11,进入VBA编缉器。点击“插入-模块”,模块1便出现在工程中。在模块1录入操作说明过程Opguide()、数据检查过程Datacheck()及成绩上传过程Autoupload(),保存,退出VBA编缉器。
在Excel下,右击菜单“操作说明”-“指定宏”-“Opguide”-“确定”,完成操作说明过程Opguide()代码与菜单“操作说明”的关联。进行相似的操作,完成其它过程代码与菜单的关联。
5 结束语
本系统基于Excel VBA完美实现电子成绩的自动上传,实际运用结果表速度很快,在网络正常的情况下,一分钟内即可完成一个班(约60人)的学生成绩上传工作,且设计相对简单,操作十分方便,表现出很好的便捷性和实用性[5]。Excel是办公室数据处理的常用软件,VB是非专业人员常用的计算机语言,只要掌握了VB,VBA就能很快上手,因而运用VBA开发的系统具有良好的可普及性和较高的推广实用价值。
参考文献:
[1] 许小荣, 夏跃伟, 高翔, 等. Excel VBA语法与应用手册[M]. 北京: 电子工业出版社, 2010.
[2] 焦萍萍, 周显春. EXCEL中的VBA程序设计[J]. 电脑知识与技术, 2016, 12(11): 63-64.
[3] 刘松. 一种快速将本地教学数据上传到网络教学系统的方法[J]. 智能计算机与应用, 2013, 3(3): 93-94, 封3.
[4] 江治. 利用VBA实现网页中自动录入成绩[J]. 安庆师范学院学报:自然科学版, 2010, 16(3): 124-127.
[5] 张正. 表单批量自动填写系统的设计与实现[J]. 计算机与现代化, 2013(2): 169-172.