国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

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

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


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

工布江达县| 富源县| 定日县| 镇江市| 元氏县| 凯里市| 淮安市| 钦州市| 镇康县| 张家口市| 米林县| 呼伦贝尔市| 基隆市| 花垣县| 吐鲁番市| 木兰县| 武穴市| 许昌市| 遂平县| 阳信县| 民权县| 太和县| 航空| 长寿区| 菏泽市| 达尔| 响水县| 曲靖市| 增城市| 新源县| 大方县| 友谊县| 武宣县| 德化县| 阿合奇县| 浦城县| 赤壁市| 綦江县| 唐河县| 肇源县| 阳城县|