廖明梅,舒清錄
對口中職招生作為考生升學考試、學校選拔優秀人才的重要途徑,是一個非常嚴肅的工作。其中試題編制與評分是一項重要活動,需兼顧考試是否方便、數據是否安全以及改卷效率是否高等多方面的因素[1,2,3]。綜合考慮,采用電子化考試是一個不錯的選擇。在常規做法中,購買成熟的考試系統,成本較高。自己選擇開發語言、數據庫,然后編制軟件,完成軟件部署、測試等,在技術、時間等方面有一定要求,實現有一定難度。有沒有一種部署簡單、控制方便的系統?
答案就是MS Office Excel(以下簡稱Excel)。Excel是一個功能強大、技術先進、使用方便的表格式數據綜合管理和分析系統,其本身就是一個數據庫。VBA編程語言使Excel更是如虎添翼,使VBA讀取Excel數據更方便,而且程序的設計更簡單。在部署方面,只要求目標機器安裝Office相應版本,無需安裝其他組件,然后考試文件復制到目標機器就可以使用,大大方便操作使用[4,5,6]。
平臺主要需求如下:
(1)界面友好,用戶登錄時首先看到考試說明;
(2)限制考試答題位置和規定答題選項,盡可能保證考生答題規范[7];
(3)能方便、有限制地查看成績;
(4)較高的安全性,盡可能保證代碼和標準答案的安全。
此Excel平臺共涉及3個工作表,分別用于完成考試說明、試題顯示/答題、標準答案界面的設計。實現了試題與標準答案分開存放[8],提高了數據的安全性。3個表的相關屬性如表1所示:

表1 工作表屬性
(1)“考試說明”工作表設計
在考試說明工作表中,合理使用Excel提供的藝術字加合適的字體修飾標題,為了防止目標機器因字體原因而無法顯示設計效果,采用對藝術字部分進行截圖。
設置了一個“進入考試”的圖形按鈕,當用戶閱讀考試說明后,點擊進入考試試題工作表,開始答題,效果如圖1所示:

圖1 考試說明工作表界面
(2)“考試試題”工作表設計
設置一個名為“對口中職計算機類招考考試試題”標題,因試題量較大,把標題行設置為凍結窗體。
采用數據有效性限制用戶只能在一定范圍內輸入/選擇,盡可能地減少考生輸入錯誤[9,10]。涉及的3種題型具體設置如下:
對于單項選擇,只能從“A”,“B”,“C”,“D”中選擇一個;
對于多項選擇題,每題限制 4個選項,則按順序把ABCD所有組合列出來供選,即“AB”,“ABC”,“ABD”,“ABCD”,“AC”,“ACD”,“AD”,“BC”,“BCD”,“BD”以及“CD”;
對于判斷題,只能從“對”,“錯”中選一個。
具體做法,對于單選題,選中要設置有效性的區域,單擊“數據”功能頁下的“數據有效性”按鈕,在彈出對話框的“有效性條件”中選擇“序列”,來源輸入“A,B,C,D”確定即可,其他題型類似。
規定可編輯區域,劃出供考生答題的區域,其他地方不允許考試點擊、操作[11,12]。具體做法為,選中答題區域,點擊“右鍵”,選擇“設置單元格格式”,在彈出的對話框中選擇“保護”選項卡,把“鎖定”前的勾去掉,在配合工作表的保護即可生效。
添加一個“查看成績”按鈕,主要用戶改卷教師查看成績。為了能使該按鈕被有限制地使用,在顯示成績之前必須進行身份驗證,效果如圖2所示:

圖2 考試試題工作表界面
(3)“標準答案”工作表設計
此工作表是整個平臺的核心,數據的安全問題不容小視,為了更加安全保存數據,從下列兩方面來加強數據的安全性。
一是充分利用Excel的大容量,把數據放在比較隱蔽的地方(比如把答案寫在EZL1014567:EZN1014645區域內)。在Excel 2010中,一個工作表有1048576行16384列,對標準答案的隱藏起到了很好的保護作用,即使有人想知道答案,在不知道工作表名的情況下,難度大大增加了。所以在特定的考試環境下,采用Excel工作表存放標準答案是有意義的,也是可行的。
二是通過VBE設置工作表的Visible屬性,使考生無法通過取消隱藏來顯示此表。做法是按Alt+F11快捷鍵,在左側窗格上部首先選中需要保護的工作表,通過其屬性面板的Visible屬性設置為“2-xlSheetVeryHidden”,再保存。
利用 Excel提供的 IF函數來計算每題的得分。例如Sheet2!C3為考生答案單元格,M3為標準答案單元格,則此題的評分規則為:
IF(Sheet2!C3="",0,IF(Sheet2!C3=M3,2,0)),即沒有填寫考試答案則0分,考生答案和標準答案相同,則得2分,否則的0分。
SUM 函數來實現總分進行統計,用 SUM(N:N)求出得分列所有小題得分之和。
把以上所有工作表設計好之后,把每個工作表的網格線、編輯欄、標題去掉,再進行工作表保護。
通過3.1只是把平臺的基本框架完成,基本能實現答題,但看成績較為麻煩。先要把隱藏工作表的隱藏屬性設置為顯示,最后,找到存儲總分的單元格。操作步驟多且繁瑣,容易出錯,所以利用宏代碼直接讀出指定單元格值并顯示出來就顯得很有必要。圍繞此問題,該平臺共設置了以下幾個宏和一個用戶窗體。
(1)ShowSheet宏
點擊“考試說明”工作表的“進入考試”按鈕,調用此宏,作用是顯示“試題顯示”工作表。宏代碼為“Sheets("考試說明").Activate”。
(2)HideRibbon宏
為了使考試操作簡單,避免考生到處點擊發生意外情況,增加了平臺的安全性,采用禁用功能區,使考生能直接操作的功能按鈕大大減少。涉及的宏代碼為[13-15]:
此宏在Workbook的Open事件中被調用。
(3)SaveDocument宏
禁用功能區,導致了考生無法通過點擊保存按鈕來實現修改內容的保存,對不習慣使用Ctrl+s組合鍵來保存的考生來說,是一件痛苦的事情。為了解決此問題,除了考試說明中明確提示外,還采用VBA代碼來實現Excel定時自動保存。
實現思路:在Workbook的Open事件中,以當前時間為準,10秒后,通過Application.OnTime DTime自動調用SaveDocument過程。而SaveDocument
過程主要完成:當ThisWorkbook.saved為假時,則調用ThisWorkbook.Save保存,以當前時間為準,10秒后再次調用自己。如此反復就可以實現定時自動保存。核心代碼如下:

(4)UserFormPassword
此窗體主要完成對用戶身份信息的驗證,如果用戶輸入正確的密碼,則調用ShowScore宏顯示成績,否則關閉本窗口。
為了防止用戶點擊窗體的關閉按鈕導致意外情況,使用FindWindow( )等API函數禁用關閉按鈕[16,17],使用戶只能點擊窗體指定的“確定”按鈕來控制。核心代碼如下:

(5)showUFPassword宏
此宏主要用于顯示身份驗證的用戶界面。被sheet2表的“查看考試成績”按鈕執行,屬于以正常方式進行查分的情況。其實現代碼如下:
Flag = 1 注釋:確認是以正常方式進行查分的情況UserFormPassword.Show 1 注釋:模態方式打開身份驗證窗體
(6)ShowScore宏
當用戶點擊“查看考試成績”時,系統應該會自動彈出一個對話框,要求驗證身份。最初考慮使用 InputBox函數來實現,但發現其輸入的密碼以明文顯示,效果不好。經分析,最后決定使用密碼文本框和確定按鈕的用戶窗體(也就是前面提及的UserFormPass word窗體)。當用戶輸入正確密碼后,自動調用自定義過程,從Excel工作表指定單元格中讀出相應成績,并使用MsgBox函數顯示各題得分以及總分,然后關閉窗體。部分實現代碼如下:


(7)保護代碼
按Alt+F11組合鍵進入VBE界面,點擊“工具”菜單下的“VBAProject屬性”,在彈出的對話框中選擇“保護”選項卡,輸入想設置的密碼即可。
在此平臺中,數據安全是一個核心問題,特別是標準答案、總分決不能被不授權人員看到,否則考試就失去了意義。通過前面幾步,一個較為合理的評分平臺基本實現了。但在平臺測試過程中,模擬考生試圖通過查看后臺代碼來獲取成績等相關信息,發現了一些問題。按Alt+F11組合鍵,點擊代碼,彈出一個VBA工程密碼框,因沒有密碼,點擊“取消”按鈕,雖然看不到 VBA代碼,但可以通過菜單或 F5按鈕逐個運行宏列表里的宏名稱,最終也可以看到考生成績,暴露出嚴重的安全隱患。
為了解決此問題,定義了一個名為 Flag的全局軟標志進行處理。具體為,如果是正常進入(點擊Excel界面上的查看成績按鈕或運行showUFPassword宏)查看成績的Flag設為1,其他情況設置為0。正常看完成績后,又把Flag設為0,下次想看成績又必須以正常方式進入。
對于ShowScore宏,在查看具體成績之前,首先判斷是否以正常方式進入(通過 Flag來判斷),如果是(Flag=1)則直接讀出存放成績的單元格,否則彈出用戶身份驗證窗口,對身份進行驗證。這樣就能保證,不管以何種方式進入,都會使程序跳轉到用戶身份驗證窗口,進行強制身份驗證。
到此為止,一個較為安全的評分平臺建成。
以上基于Excel 2010實現的中職招考平臺,在過去招生考試實踐中取得了較好的效果,幾秒鐘就可以完成對一份考卷140小題的評分,大大降低了閱卷工作量。當然,也有待完善的地方,比如能對存入Excel工作表的題目,結合Excel的隨機函數,在試題總量不變的情況下,打亂題目的顯示順序,評分后把所有的成績和考生信息對應地匯總到一個格式化文件中就更加實用了。
[1]李花,張偉娜.用Excel設計標準化試卷的自動判卷系統[J].計算機與現代化.2012.1
[2]羅翠瓊.基于Excel的自動閱卷評分系統[J].電腦知識與技術.2013.09
[3]劉雁.基于Excel VBA的通用客觀題自我訓練工具的設計與實現[J].現代計算機.2013.09
[4]郝晗瀚,康慕寧.Excel操作題自動出題系統的設計與實現[J].計算機與現代化.2013.12
[5]羅剛君.Excel VBA程序開發自學寶典[M].北京:電子工業出版社,2011.
[6]李花,郭建璞.用VBA程序保護Excel文件[J].計算機與現代化.2013.9.
[7]安曉梅.Office 2007寶典[M].北京:人民郵電出版社,2008.
[8]張穎.基于 Excel構建計算機考試系統[J].電子制作.2013.12.
[9]Excel Home.Excel VBA實戰技巧精粹[M].北京:人民郵電出版社,2013.
[10]韓小良.Excel VBA活用范例大辭典(第2版)[M].中國鐵道出版社,2011.
[11]唐燕,韓愛慶,翟興.基于VBA技術實現調查問卷數據自動讀取[J].計算機與現代化.2014.3
[12]舒清錄,廖明梅.Excel電子自動評分系統構建的研究與實現[J].科技創新導報.2011-02-01
[13]張寧.用Excel制作試卷必須解決的幾個問題[J].計算機時代.2013年第3期
[14]Microsoft Inc.Excel對象模型概述[DB/OL].http://msdn.microsoft.com/zh-cn/library/wss56b z7.aspx,2013-07-11.
[15]韓小良.Excel VBA高效辦公實用寶典(第1版)[M].中國鐵道出版社,2009.
[16][16]李政,王月,鄭月鋒等.VBA 應用基礎與實例教程(第2版)—上機實驗指導[M].國防工業出版社,2009.
[17]王東明,葛武滇.Visual C#.NET程序設計與應用開發[M].北京:清華大學出版社,2008:18.