• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

      基于VBA的題庫查重算法研究

      2012-12-31 00:00:00韓愛慶薛磊唐燕許偉
      電腦知識與技術 2012年28期


        摘要:在題庫建設中,人工進行題目查重耗時,費力且錯誤率高。分析了題目查重的關鍵要素并使用Excel中的VBA編程功能和Excel對象模型實現(xiàn)了對題庫的自動查重,對查重的關鍵算法和主要程序作了詳細介紹。
        關鍵詞:Excel;VBA編程;題庫;查重
        中圖分類號:TP317 文獻標識碼:A 文章編號:1009-3044(2012)28-6761-03
        1 概述
        在高校題庫建設工作中,由于題庫題目數(shù)量巨大,出題人在題庫建設中要進行大量的添加、刪除和編輯等操作,重復使用相同的題目時有發(fā)生。另外有些題庫需要課程組教師聯(lián)合出題,也會造成很多重復題目出現(xiàn)。傳統(tǒng)解決辦法是人工逐題排查,工作強度非常大。因此需要一種自動查重功能的軟件,使教師或管理人員在審查時能快速準確的定位重復題目。本文介紹如何利用Excel中的VBA編程技術,實現(xiàn)對題庫中的題目自動查重。
        2 Excel VBA及Excel對象模型
        VBA(Visual Basic for Application)是開發(fā)Excel應用程序的編程語言,也是內嵌于其他Office套件的應用程序開發(fā)語言]。VBA的主要任務是組織或集合Office程序的功能,雖然它無法脫離Office環(huán)境獨立運行,但卻在自動化工作進程、個性化工作界面等方面有著內在的優(yōu)勢。作為Excel中的程序語言或稱宏語言,由于Excel自身強大的數(shù)據(jù)分析與處理功能,使得Excel VBA具有更廣泛的應用前景。與所有其它編程語言一樣,VBA編程語言也是由類型、變量、數(shù)組、函數(shù)和流程控制等基本元素組成。在Office編程環(huán)境下,所有VBA代碼都位于模塊中,模塊是存儲VBA代碼的容器。模塊有三種類型:對象模塊、標準模塊和類模塊。其中,對象模塊是包含對象專用代碼的模塊,如工作表模塊和工作簿模塊;標準模塊用于存儲公用的,共享代碼的模塊;類模塊則可以實現(xiàn)基于對象的編程,創(chuàng)建自己的屬性、方法和事件。
        Excel中的工作簿、工作表和單元格等都稱為對象。在Excel中,像這樣的對象共有100多個,這些對象具有層次結構,如圖1所示。我們可以通過對象的層次結構概念來理解對象之間的聯(lián)系:
        1)整個Excel的對象可以看做一個層次結構;
        2)每一個對象總是處在一個特定的對象層次中;
        3)除了Application對象外,每一個對象都是由高層次的對象派生出來的;
        4)一個對象可以派生出其他的對象,派生出的對象處于原對象的下一個層次中。
        為了在程序中有效地調用這些Excel中的對象,開發(fā)人員必須理解這個對象層次結構并熟悉每個對象在這個層次結構中所處的位置。
        3 Excel題庫結構及查重算法
        本文研究的目標Excel題庫模型包括題型、題目、A選項、B選項、C選項、D選項和答案等列。如下圖所示。實際上,為了便于題庫建設后根據(jù)各種需要進行抽題組卷,大部分題庫都要比該模型復雜,實際的題庫一般還包括章節(jié)、知識點、難度系數(shù)、性質(記憶、理解和操作等)、分值、命題人和審題人等等。
        本文所探討的是題目查重,對于選擇題,查重的本質是查找題目列和各選項列是否重復,若某兩個選擇題的題目列和各選項列完全一致,則可標記為是重題;對于填空題或簡答題,由于只有題目列,沒有選項列,只要檢測題目列是否有重復值即可,使用Excel2010的條件格式即可實現(xiàn)查重。因此,不管實際題庫結構如何,查重問題可歸結為圖2所示的關鍵列,其它列對問題解決并無幫助,可忽略。本文著重探討選擇題中的單選題。由于多選題與單選題的查重方式相同,不再贅述。
        下面給出針對選擇題的查重算法:
        第1步:在答案列后添加一列“重復標識”,用于對重復題目進行標識。設置變量rws=總行數(shù);
        第2步:設置外循環(huán)變量初始值i=2,從第2行開始逐行遍歷題庫;
        第3步:當i=n(n>=2 and n<=rws-1),如果“重復標識”為空,則執(zhí)行第4步,否則設置i=i+1,此時,若i<=rws-1,則重復執(zhí)行第3步,否則結束外循環(huán),查重結束。
        第4步:設置內循環(huán)變量初始值j=i+1,從第i+1行逐行遍歷題庫;
        第5步:當j=m(m>=i+1 and m<=rws),將該行的題目、A選項、B選項、C選項和D選項與i行對應列進行比較,若各對應項全部相同,則i行題目與j行題目重復,將i行“重復標識”列單元格設為“Tagi”(注意,i為實際行值),將j行“重復標識”列單元格設為“與Tagi重”,并將i行和j行突出顯示。否則,設置j=j+1,此時若j<=rws,則重復執(zhí)行第5步,否則結束內循環(huán),執(zhí)行步驟6;
        第6步:設置i=i+1,若i<=rws-1,則執(zhí)行第3步,否則結束外循環(huán),查重結束。
        4 算法實現(xiàn)及主程序
        下面通過部分主程序來說明查重原理。在以下主程序中,首先清除當前題目格式,并將”H”列設置列標題“重復標識”,該列將用于對重復列進行標識。變量rws用于存儲題目總行數(shù),使用變量i控制外循環(huán),從第2行循環(huán)至rws-1行,對于外循環(huán)中的每一行i,都使用內循環(huán)遍歷i+1到rws行,使之與i行題目進行比較,一旦發(fā)現(xiàn)重復題目,則將對應的“H”列做標記,將i行標記為“Tagi”,將j行標記為“與Tagi重”,同時將重復題目設置背景色以突出顯示。當外循環(huán)遇到有重復標記的行時不需處理,跳過即可。使用變量repTag記錄是否重復,默認為True,使用變量k來控制循環(huán)實現(xiàn)對第2列到第6列的比較,只要有一列值不同就將repTag設為False。主過程如下:
        查重結果如圖3所示:
        5 結束語
        本文使用VBA編程技術和Excel對象模型實現(xiàn)了題庫查重功能,對于重復題目進行了突出顯示并加以文字標注,在實際題庫管理工作中應用效果良好,顯著減輕了勞動強度。 Excel軟件是目前最廣泛的辦公數(shù)據(jù)處理和分析軟件,但是大部分使用者只使用了它的常規(guī)功能而忽略了它的高級編程功能。實際上,在面對復雜數(shù)據(jù)處理問題時,只要具有初級編程知識,就可開發(fā)出自動、高效的自動化數(shù)據(jù)處理程序。
        參考文獻:
        [1] Microsoft. Office for Developers[OL]. http://msdn.microsoft.com/en-us/office/.
        [2] Microsoft. Office開發(fā)中心[OL]. http://msdn.microsoft.com/zh-cn/office/.
        [3] John Walkenbach.Excel 2007 Power Programming With VBA[M].Indianapolis:Wiley Publishing,Inc,2007: 133-386.
        [4] John Walkenbach.Excel VBA Programming For Dummies 2nd Edition 2010[M].Indianapolis:Wiley Publishing, Inc,2010:213-231.
        [5] Excel Home. Excel應用大全[M].北京:人民郵電出版社,2008:785-809.
        [6] 毛奔,鄒嵐.利用VBA在Word中實現(xiàn)自動排版功能[J].應用科技,2005,32(11):37-3

      调兵山市| 颍上县| 泸水县| 绍兴县| 休宁县| 襄垣县| 余姚市| 沙田区| 广州市| 铜川市| 江陵县| 韶山市| 许昌市| 天全县| 山东省| 连云港市| 安国市| 兴山县| 霞浦县| 元谋县| 龙游县| 清涧县| 江都市| 海淀区| 东乡| 神农架林区| 贵州省| 丽水市| 克拉玛依市| 泌阳县| 安平县| 紫金县| 观塘区| 古丈县| 连山| 武川县| 黑水县| 阳朔县| 石狮市| 滨州市| 甘德县|