摘要:在線成績分析是網(wǎng)絡(luò)教學(xué)系統(tǒng)中的重要功能。基于OWC的在線成績分析系統(tǒng)利用OWC組件統(tǒng)計(jì)計(jì)算和圖表功能可以在WEB上實(shí)現(xiàn)在線考試成績的匯總和分析。將其設(shè)計(jì)為一個(gè)Web Services可以為各種網(wǎng)絡(luò)教學(xué)系統(tǒng)提供教學(xué)評(píng)價(jià)。
關(guān)鍵詞:OWC;成績分析;Web Services
中圖分類號(hào):TP311文獻(xiàn)標(biāo)識(shí)碼:A文章編號(hào):1009-3044(2008)34-1665-03
The Design and Implement of Online Score Analysis System Based on OWC
SHAO Shan
(News and Media Department of Yangzhou University, Yangzhou 225002, China)
Abstract: Online score analysis is an important function of Web based instruction,Base on Office Web Component's statistic calculate and chart function, Online Score Analysis System can collect and analysis the score data of online test in Web. This system is designed as a Web Services in order to evaluate various Web based instruction.
keywords: Office Web Component; Score Analysis; Web Services
1 引言
基于WEB的遠(yuǎn)程教育強(qiáng)調(diào)以自主學(xué)習(xí),個(gè)性化學(xué)習(xí)。采用必要的學(xué)習(xí)過程監(jiān)控和學(xué)習(xí)效果評(píng)價(jià)手段是網(wǎng)絡(luò)教學(xué)取得成功的重要保證。EXCEL電子表格軟件包含了豐富統(tǒng)計(jì)分析工具和圖表制作工具,利用它的公式和宏可以方便地完成成績分析功能。但EXCEL只能單機(jī)使用,無法直接嵌入WEB教學(xué)系統(tǒng)中。基于Office Web Component(簡稱OWC)的在線成績分析系統(tǒng)在WEB上實(shí)現(xiàn)了EXCEL的成績分析功能,為網(wǎng)絡(luò)教學(xué)評(píng)價(jià)提供了有力支持。
2 基于OWC的在線成績分析系統(tǒng)設(shè)計(jì)
2.1 系統(tǒng)功能
目前,絕大多數(shù)WEB教學(xué)系統(tǒng)的在線考試都是通過WEB網(wǎng)頁動(dòng)態(tài)訪問數(shù)據(jù)庫實(shí)現(xiàn),常用有ACCESS和SQL 數(shù)據(jù)庫,數(shù)據(jù)庫一般包含學(xué)生表(USERS)、試題庫表(TEST)、成績表(SCORE)等。基于OWC的在線成績分析以WEB教學(xué)中的成績表為主要數(shù)據(jù)源。系統(tǒng)設(shè)計(jì)為一個(gè)Web Services,只需將考試成績表傳遞給該Web Services,系統(tǒng)就可以像EXCEL一樣進(jìn)行統(tǒng)計(jì)分析、生成圖表,再將結(jié)果插入一WEB網(wǎng)頁返回客戶端。任何基于WEB的網(wǎng)絡(luò)教學(xué)系統(tǒng)都可以方便調(diào)用該Web Services,實(shí)現(xiàn)資源共享。
2.2 技術(shù)方案
在線成績分析系統(tǒng)調(diào)用的OWC是一組能夠在 Web 頁上使用并提供 Office 功能的 ActiveX 控件的集合,隨同OFFICE軟件一起安裝。包含四個(gè)主要組件: Spreadsheet (電子數(shù)據(jù)表)、Chart(圖表)、PivotTable(數(shù)據(jù)透視表)、Data Source(數(shù)據(jù)源)。目前Office2003提供的Office Web Component的版本為11.0(OWC11) [1]。根據(jù)成績分析的實(shí)際需要在系統(tǒng)中只使用了前三個(gè)。
Spreadsheet用于接收和顯示成績表數(shù)據(jù),同時(shí)利用函數(shù)公式計(jì)算統(tǒng)計(jì)數(shù)據(jù),如排名、分段人數(shù)、正態(tài)分布率等。其接收的數(shù)據(jù)類型有XMLUrl 、XMLData,CSVUrl、CSVData和HTMLData。前兩種必須是EXCEL格式的XML文件和數(shù)據(jù),將成績數(shù)據(jù)轉(zhuǎn)換為此格式比較麻煩。CSV(Comma Separated Values)是逗號(hào)分開的數(shù)據(jù)文件,每行為一條記錄,數(shù)據(jù)轉(zhuǎn)換比較簡單,而HTMLData不符合二維表結(jié)構(gòu),不利于生成圖表,一般不用。經(jīng)測試,以CSVData字符串作為Spreadsheet數(shù)據(jù)源時(shí),由于網(wǎng)頁中字符串變量總長度的限制,導(dǎo)入的數(shù)據(jù)過大會(huì)造成瀏覽器錯(cuò)誤,且速度慢。因此,最終選擇將成績表轉(zhuǎn)換為CSV文件作為CSVUrl數(shù)據(jù)源。
PivotTable主要是基于Spreadsheet中的數(shù)據(jù)生成數(shù)據(jù)透視表。
Chart則用于繪制各種統(tǒng)計(jì)圖表,如柱狀圖、折線圖、餅圖等,Chart以Spreadsheet和PivotTable的數(shù)據(jù)區(qū)域作為數(shù)據(jù)源。
系統(tǒng)結(jié)構(gòu)如圖1所示,只要客戶端安裝了Office軟件,則在WEB瀏覽器中均可以使用OWC。
3 利用OWC 實(shí)現(xiàn)在線成績分析的方法
3.1 數(shù)據(jù)庫數(shù)據(jù)導(dǎo)入OWC Spreadsheet
通常的成績表結(jié)構(gòu)示例如下:
SCORE(考試編號(hào)(C6)、課程名(C20)、學(xué)生名(C15)、成績(N4.1))
在Mcrosoft Visual Studio 2005中用ASP.net(VB)建立WEB SERVICES開發(fā)項(xiàng)目中,可以通過OleDbConnection訪問ACCSE數(shù)據(jù)庫,SQLConnection訪問SQL數(shù)據(jù)庫,將數(shù)據(jù)庫成績表讀DataReader中,根據(jù)技術(shù)方案中的思路,應(yīng)先將DataReader中的成績表數(shù)據(jù)讀取出來寫進(jìn)一個(gè)CSV文本文件score.csv中,再將該文件作為Spreadsheet的CSVUrl數(shù)據(jù)源。
在網(wǎng)頁中插入Office web spreadsheet component11.0組件的HTML代碼為:
<o(jì)bject classid=\"clsid:0002E559-0000-0000-C000-000000000046\" id=\"Sheet\" >
</object>
設(shè)置數(shù)據(jù)源代碼如下:
Private Sub importData ( )
'此處為數(shù)據(jù)庫連接,和將成績表讀入dtReader中代碼,略
Dim csvfile as string =\"score.csv\"
DrtoCSV(dtReader,csvfile)
end sub
Sub DrtoCsv(dtReader as DataReader, csvfile as string)
Dim strwriterobj As StreamWriter '聲明流書寫對(duì)象
strwriter= File.CreateText(servermappath(csvfile ) '創(chuàng)建文本文件對(duì)象
Dim I as intger
Setdef_sep=\",\"'以逗號(hào)分隔
strLine=\"\"
For I= 0 to DtReader.fieldcount -1 '讀字段名作為第一行
strLine=strLine DtReader.GetName(I) def_sep
Next
strwriterobj.WriteLine(strLine) '寫入字段名內(nèi)容
While DtReader.Read( )
strLine=\"\"
For I=0to DtReader.fieldcuont -1
strLine=strLine trim(DtReader.GetValue(I)) def_sep
Next
strwriterobj.WriteLine( strLine) '寫入記錄內(nèi)容
End while
strwriterobj.Close ( ) '完成操作,關(guān)閉流對(duì)象
End Sub
<scriptlanguage=\"VBScript\">
sheet.CSVUrl=\"score.csv\"'設(shè)置CSVUrl數(shù)據(jù)源
</script>
3.2 在WEB網(wǎng)頁spreadsheet組件中修改和導(dǎo)出數(shù)據(jù)
將數(shù)據(jù)導(dǎo)入spreadsheet組件后,該組件不僅能修改數(shù)據(jù)、添加計(jì)算公式,也可以通過編程實(shí)現(xiàn)數(shù)據(jù)導(dǎo)出。操作該對(duì)象的代碼為:
1) 數(shù)據(jù)區(qū)域命名:
sheet.Names.Add(\"ScoreRange\", \"sheet1! $D$2:$D\")
2) 修改單元格數(shù)據(jù):intRow,intCol 為工作表單元格行和列
sheet.ActiveSheet.Cells[intRow, intCol].Value= request.[\"Cellvalue\"];
3) 在指定單元格中插入公式:如求考試成績的平均值
sheet.ActiveSheet.Cells[intRow, intCol]. Formula= \"=Average(ScoreRange)\"
4) 導(dǎo)出數(shù)據(jù):spreadSheet帶有方法Exports可以將SpreadSheet中的數(shù)據(jù)和格式統(tǒng)統(tǒng)導(dǎo)出成ExcelXML編碼的文件。該文件可用EXCEL打開或作為其它spreadSheet的XMLUrl源。
SpreadSheet.Export(desPathFileName,Owc11.SheetExportActionEnum.ssExportActionNone,Owc11.SheetExportFormat.ssExportXMLSpreadsheet);
3.3 數(shù)據(jù)篩選和排序
Spreadsheet組件本身具有的工具欄中就有篩選和排序按鈕,在WEB網(wǎng)頁中可交互方式完成數(shù)據(jù)的篩選和排序。如有必要,也可通過代碼(略)實(shí)現(xiàn)此功能。
3.4數(shù)據(jù)統(tǒng)計(jì)和分析
EXCEL表格的統(tǒng)計(jì)分析功能主要通過計(jì)算函數(shù)和公式完成,對(duì)成績分析來講主要有:
成績平均值:=AVERAGE(rangeName); 方差:=DEVSQ(rangeName)
最高:=MAX(rangeName); 最低:=MIN(rangeName);
排名:= RANK(rangeName, rangeName)
正態(tài)分布率:= NORMDIST(rangename,AVERAGE(rangename),DEVSQ( rangename),TRUE)
分段人數(shù)統(tǒng)計(jì):
80分~90分的人數(shù) =COUNTIF(rangeName,\">=80\")-COUNTIF(rangeName,\">90\")
70分~80分的人數(shù) =COUNTIF(rangeName,\">=70\")-COUNTIF(rangeName,\">80\")
不及格的人數(shù) =COUNTIF(rangeName,\"<60\")
及格率:= COUNTIF(rangeName,\">=60\")/COUNT(rangeName)
優(yōu)秀率:= COUNTIF(rangeName,\">=90\")/COUNT(rangeName)
一個(gè)EXCEL工作薄(book)可以包含多個(gè)工作表(sheet),為保證數(shù)據(jù)導(dǎo)入和與CHART組件數(shù)據(jù)交換的安全性,一般應(yīng)將成績數(shù)據(jù)放在sheet1工作表中,而將統(tǒng)計(jì)數(shù)據(jù)放在sheet2中。其中的rangeName為成績數(shù)據(jù)的區(qū)域(range)名。可通過代碼修改單元格公式,只需要將公式字符串賦值給指定的單元格Formula即可:
如:speadsheet1.Names.Add(\"rangename\", \"sheet1! $D$2:$D \")
speadsheet1.sheets(2).Cells(intRow, intCol).Formula=\"=COUNTIF(rangename,\"\"<60\"\")\"
3.5 數(shù)據(jù)透視表
成績表一般以流水帳形式記錄數(shù)據(jù),其中的每條記錄內(nèi)容為某位學(xué)生在某門課的某次考試成績,記錄數(shù)量較大。數(shù)據(jù)透視表是一種對(duì)大量數(shù)據(jù)快速匯總和建立交叉列表的交互式表格,能幫助用戶分析、組織數(shù)據(jù)[2]。利用它可以很快地從不同角度對(duì)數(shù)據(jù)進(jìn)行分類匯總。 對(duì)考試成績來說,可以將課程作為列,將學(xué)生作為行,計(jì)算每個(gè)學(xué)生各門課程的平均成績,生成透視表(圖2)。PivotTable控件HTML代碼如下:
<OBJECT classid=\"clsid:0002E552-0000-0000-C000-000000000046\" id=\"pvt1\" ></OBJECT>
數(shù)據(jù)透視表生成代碼:
<scriptlanguage=\"VBScript\">
strPath = server.mappath(\"test.mdb\")
Pvt1.ConnectionString = \"provider=microsoft.jet.oledb.4.0;data source=\" strPath
Pvt1.DataMember = \"score\"
Pvt1.ActiveView.AutoLayout’自動(dòng)導(dǎo)入數(shù)據(jù)透視表。
set c=pvt1.Constants
ctotal = pvt1.activeview.AddTotal(\"avg\", pvt.ActiveView.FieldSets(3).Fields(0),c.plFunctionAverage)
With pvt1.ActiveView
.FilterAxis.InsertFieldSet(pvt1.activeview.fieldsets(0))
.FilterAxis.InsertFieldSet(pvt1.activeview.fieldsets(1))
.RowAxis.InsertFieldSet(pvt1.activeview.fieldsets(2))
.ColumnAxis.InsertFieldSet(pvt1.activeview.fieldsets(3))
. DataAxis.InsertTotal(ctotal, 0)
.DetailAutoFit = True
.ExpandDetails = PivotTableExpandEnum.plExpandAutomatic
End With
</script>
3.6 統(tǒng)計(jì)圖表輸出
統(tǒng)計(jì)圖表是以圖表直觀表現(xiàn)數(shù)據(jù)關(guān)系的一種方式。常用的有柱狀圖、餅圖、折線圖等[3]。需要注意的是不同圖的參數(shù)和數(shù)據(jù)源選擇有所不同。例如用Chart組件生成分段人數(shù)的柱狀圖,組件HTML代碼為:
<o(jì)bjec classid=\"clsid:0002E500-0000-0000-C000-000000000046\" id=\"Cspace\">
</object>
將Chart數(shù)據(jù)源綁定到spreadsheet代碼:
<scriptlanguage=\"VBScript\">
sheet.Names.Add(\"RangeFenduan\", \"sheet1! $G$2:$G7\")
Dimcht,ser,rngValues,c
Dim fSeriesInCols
fSeriesInCols=1 '1:以行產(chǎn)生系列,true:以列產(chǎn)生系列
c=sheet.Constants
cspace.Clear
cspace.DataSource=sheet '綁定數(shù)據(jù)源
cht=cspace.Charts.Add()
cht.Type=c.chChartTypeColumnClustered'定義為柱狀圖
cht.HasTitle=true'顯示標(biāo)題
cht.Title.Caption=\"分段人數(shù)統(tǒng)計(jì)圖\"'設(shè)置標(biāo)題內(nèi)容
setrngValues=sheet.Range(RangeFenduan)'取數(shù)據(jù)
foreachserincht.SeriesCollection
if fSeriesInCols then
ser.SetData(c.chDimValues,0,rngValues.Columns(ser.Index+1).Address)
else
ser.SetData(c.chDimValues,0,rngValues.Rows(ser.Index+1).Address)
endif
setdl=ser.DataLabelsCollection.Add()
dl.Position=c.chLabelPositionTop
next
cht.HasLegend=true'顯示圖例
</script>
4 小結(jié)
基于OWC的成績分析可以通過成績數(shù)據(jù)的導(dǎo)入、公式計(jì)算、數(shù)據(jù)透視表和圖表輸出,實(shí)現(xiàn)了對(duì)網(wǎng)絡(luò)教學(xué)的評(píng)價(jià)。將其設(shè)計(jì)為一個(gè)Web Services,可被多個(gè)教學(xué)系統(tǒng)共享,在實(shí)踐中取得了良好的效果。但在調(diào)用OWC組件時(shí)也存在客戶端必須安裝Office軟件局限性。
參考文獻(xiàn):
[1] 構(gòu)建基于 Web 的分析系統(tǒng)[EB/OL].http://msdn.microsoft.com/.
[2] Microsoft Office Web 組件基礎(chǔ)[EB/OL].http://tech.it168.com/.
[3] OWC中的PivotTable(透視表)使用XML數(shù)據(jù)源[EB/OL].http://blog.csdn.net.