張廣梅,朱紅梅
(山東農(nóng)業(yè)大學(xué)信息科學(xué)與工程學(xué)院,山東 泰安 271000)
計(jì)算機(jī)文化基礎(chǔ)是高等教育的基礎(chǔ)課程[1]。Office辦公自動(dòng)化軟件的使用是計(jì)算機(jī)文化基礎(chǔ)的重要內(nèi)容之一。為了更有效的對(duì)學(xué)生的學(xué)習(xí)效果進(jìn)行檢查,計(jì)算機(jī)文化基礎(chǔ)的考試應(yīng)經(jīng)采用無紙化的考試方式進(jìn)行。針對(duì)office軟件的特點(diǎn),在考試過程中,通常都是給出排版要求,學(xué)生根據(jù)排版要求對(duì)指定的文檔進(jìn)行排版,最后提交排版之后的文檔。通常情況下,教師根據(jù)排版要求對(duì)學(xué)生提交的文檔進(jìn)行人工檢查。這樣做不僅工作量大,而且由于每個(gè)教師的評(píng)分尺度不同,無法客觀公正地對(duì)學(xué)生的學(xué)習(xí)效果進(jìn)行評(píng)價(jià)。為解決這一問題,很有必要開發(fā)office文檔的自動(dòng)分析系統(tǒng)[2-3],一方面可以大大降低教師的閱卷工作量;同時(shí)可以有效地避免因評(píng)分尺度不同所造成的學(xué)生成績(jī)的差異。本文以wod文檔為例,對(duì)word文檔自動(dòng)分析程序中所涉及的相關(guān)問題進(jìn)行了討論。
Word文檔編輯過程中所涉及的每一項(xiàng)內(nèi)容都是一個(gè)對(duì)象,這些對(duì)象的相互關(guān)聯(lián)組成了Word中的對(duì)象模型[4]。也就是說,在Word文檔中,文檔、對(duì)話框、文本框、圖形、圖表甚至應(yīng)用程序本身都是對(duì)象[5],同時(shí),這些對(duì)象都有自己的屬性和方法,因此,可通過程序來訪問word文檔中的這些對(duì)象,完成文檔格式的自動(dòng)分析。
1.2.1 利用font對(duì)象獲取文字的排版格式
Font對(duì)象代表指定對(duì)象的字符格式。在對(duì)office文檔進(jìn)行排版的過程中,經(jīng)常需要對(duì)指定的文件的格式進(jìn)行設(shè)置。文字格式包括字體、字形、字號(hào)、字體顏色、字符間距等。在word文檔進(jìn)行分析時(shí),要獲取文字的字體設(shè)置信息可以通過讀取Font對(duì)象的相關(guān)屬性完成。表1對(duì)Font 對(duì)象的相關(guān)屬性進(jìn)行了介紹。
表1 Font 對(duì)象的相關(guān)屬性
1.2.2 利用ParagraphFormat對(duì)象獲取段落的排版信息
段落排版的相關(guān)信息存儲(chǔ)在Paragraph對(duì)象中。代表整個(gè)WORD文檔的Document對(duì)象具有Paragraphs屬性,它是文檔中所有Paragraph對(duì)象的集合,該集合包含指定文檔、區(qū)域或所選內(nèi)容中的所有段落,該集合中的每一個(gè)元素代表了一個(gè)Paragraph對(duì)象,一個(gè)Paragraph對(duì)象代表了文檔中一個(gè)段落。Paragraph對(duì)象具有format屬性,通過讀寫Paragraph 對(duì)象的format屬性,可以獲取到一個(gè)ParagraphFormat對(duì)象。ParagraphFormat對(duì)象記錄了段落的所有格式信息。表2列出了ParagraphFormat對(duì)象的相關(guān)信息。
表2 ParagraphFormat對(duì)象的部分屬性
1.2.3 利用Font對(duì)象和Sections對(duì)象獲取邊框和底紋的排版信息
邊框和底紋的處理也是在word文檔排版過程中的常用的基本操作。邊框和底紋主要包括文字邊框、文字底紋和頁面邊框。文字的邊框和底紋記錄在Font對(duì)象的相關(guān)屬性中,而頁面邊框記錄在Sections對(duì)象的相關(guān)屬性中。表3列出了記錄相關(guān)排版信息的對(duì)象及屬性。
表3 邊框和底紋的屬性列表
1.2.4 利用TextColumns對(duì)象獲取文檔的分欄信息
分欄設(shè)置的相關(guān)信息可以通過TextColumns對(duì)象獲得。TextColumns對(duì)象是文檔中TextColumn對(duì)象的集合。通過訪問Document.Pagesetup.TextColums 的屬性,可以獲取word文檔中的TextColums的對(duì)象。表4中列出了TextColumn的屬性,通過讀取這些屬性可以獲取相應(yīng)的分欄信息。
表4 分欄的屬性列表
1.2.5 利用Dropcap對(duì)象獲取首字下沉的相關(guān)信息
首字下沉的相關(guān)信息存儲(chǔ)在Dropcap對(duì)象中。Dropcap對(duì)象代表段落中格式為首字下沉的大寫字母。通過訪問文檔對(duì)象的Selection.Paragraphs(i).DropCap的屬性可以獲取文檔中的第i個(gè)段落的實(shí)現(xiàn)首字下沉的Dropcap對(duì)象。表5列出了Dropcap對(duì)象的相關(guān)屬性。
表5 Dropcap對(duì)象的相關(guān)屬性
1.2.6 利用Shape對(duì)象獲取藝術(shù)字格式的相關(guān)信息
藝術(shù)字屬于圖形的一種,藝術(shù)字格式信息存儲(chǔ)在Shape對(duì)中。該對(duì)象可以通過訪問Document對(duì)象的Shapes屬性獲得,Shapes屬性是word文檔中所有Shape對(duì)象的集合,每個(gè)Shape對(duì)象對(duì)應(yīng)一個(gè)圖形。因此,可以通過Document.shapes屬性獲取文檔中的Shape對(duì)象集合。在此基礎(chǔ)上,通過讀取表6列出的屬性,獲取關(guān)于藝術(shù)字的排版信息。
表6 藝術(shù)字的屬性列表
文檔格式的自動(dòng)分析需要分析程序的支持[6]。為達(dá)到自動(dòng)分析的目的,需要根據(jù)文檔的排版要求,需要從標(biāo)準(zhǔn)文檔(標(biāo)準(zhǔn)文檔是指已經(jīng)按照排版要求完成排版操作的文檔)中將文檔的排版參數(shù)提取出來,并以此為依據(jù),用來對(duì)學(xué)生的考試文檔進(jìn)行評(píng)測(cè)。為提高學(xué)生文檔格式自動(dòng)分析的效率,可以先將文檔的排版要求記錄在ACCESS數(shù)據(jù)庫(kù)中,表7類出了關(guān)于字體設(shè)置的相關(guān)信息(針對(duì)其他排版要求的數(shù)據(jù)的存儲(chǔ)方式與下表類似)。
表7 字體信息表
2.2.1 排版參數(shù)的設(shè)置
在從標(biāo)準(zhǔn)文檔中提取排版參數(shù)之前,首先要指定需要提取的要素。圖1給出了關(guān)于文檔中文本的字體等相關(guān)排版參數(shù)的選擇的操作界面。
圖1 字體參數(shù)設(shè)置
2.2.2 排版參數(shù)的提取
在設(shè)置好排版參數(shù)之后,接下來就可以從標(biāo)準(zhǔn)文檔中進(jìn)行參數(shù)的提取工作。算法1列出的示例代碼完成排版參數(shù)的提取。
算法1 字體信息提取
Dim t As Microsoft.Office.Interop.Word.Document
t = GetObject(“f:標(biāo)準(zhǔn)答案.doc”)
t.ActiveWindow.Selection.Find.Text = Textbox1.text
If t.ActiveWindow.Selection.Find.Execute() Then
select_name = t.ActiveWindow.Selection.Font.Name
Endif
算法1:給出了相關(guān)文本的字體信息的提取過程。可以參考上述過程完成排版參數(shù)的提取。
2.2.3 排版參數(shù)的存儲(chǔ)
為提高文檔格式自動(dòng)分析的效率,可以將提取到的參數(shù)寫入到標(biāo)準(zhǔn)答案數(shù)據(jù)庫(kù)中,為后續(xù)分析程序的自動(dòng)生成準(zhǔn)備好數(shù)據(jù)[7-8]。算法2中的示例代碼完成了向數(shù)據(jù)庫(kù)中寫入排版參數(shù)的過程。
算法2:排版參數(shù)寫入數(shù)據(jù)庫(kù)
mYpath = “f:文檔ì自動(dòng)分析.accdb”
cONn = CreateObject(“ADODB.Connection”)
cONn.ConnectionString = “Provider=Microsoft.Ace.OleDB.12.0;Data Source=” & mYpath
cONn.ConnectionString = cONn.ConnectionString& “;Jet OLEDB:Database “
cONn.Open()
Sql = “insert into fonts(text_value) values(‘” & texts & “’)”
cONn.Execute(Sql)
在提取完格式參數(shù)之后,接下來可以根據(jù)提取到的數(shù)據(jù)生成格式分析程序。格式分析程序包含以下幾個(gè)部分:(1)讀取標(biāo)準(zhǔn)文檔參數(shù)數(shù)據(jù)庫(kù),獲取閱卷參數(shù);(2)利用讀取的閱卷參數(shù),依次分析每個(gè)學(xué)生的答題文檔,根據(jù)分析的結(jié)果計(jì)算每個(gè)知識(shí)點(diǎn)的得分,將每個(gè)同學(xué)的得分情況寫入得分?jǐn)?shù)據(jù)庫(kù)中;重復(fù)執(zhí)行(2),直到分析完所有學(xué)生的文檔。下面對(duì)文檔分析程序中的關(guān)鍵問題進(jìn)行討論。
對(duì)office 文檔的閱卷操作就是檢查學(xué)生有無按照要求完成排版操作。根據(jù)前面的介紹,在對(duì)標(biāo)準(zhǔn)文檔進(jìn)行分析時(shí),已經(jīng)將相應(yīng)的排版信息存儲(chǔ)在數(shù)據(jù)庫(kù)中,因此在閱卷之前,需要讀取ACESS數(shù)據(jù)庫(kù)中存儲(chǔ)的閱卷參數(shù),以此來指導(dǎo)閱卷工作。算法3中的示例代碼展示了讀取ACEESS中的數(shù)據(jù)庫(kù)的過程。
算法3:訪問ACESS數(shù)據(jù)庫(kù)
Dim con As New OleDbConnection
Dim cmd As New OleDbCommand
Dim dr As OleDbDataReader
con.ConnectionString=“Provider=Microsoft.Ace.OleDB.12.0;Data Source=”& mYpath
con.Open()
cmd.Connection = con
cmd.CommandText = Sql
dr = cmd.ExecuteReader()
Dim col As Integer
col= dr.GetOrdinal(“fontname”)
text = dr.GetValue(col)
為完成學(xué)生試卷的自動(dòng)分析,必須將要生成的格式分析代碼以文件的形式進(jìn)行存儲(chǔ)。為將生成的格式分析代碼寫入文件中,在格式分析程序的生成過程中,首先創(chuàng)建文本流對(duì)象,接下來,依次將完成格式分析的代碼寫入這個(gè)文件中。由于一場(chǎng)考試中有多人參加,因此,在生成的閱卷程序中,首先要指定存放學(xué)生試卷的文件夾,然后,依次讀取文件夾下的每一文件,并從文件中提取需要的格式信息,并將讀取的結(jié)果與上面讀到的標(biāo)準(zhǔn)結(jié)果進(jìn)行比較,完成對(duì)學(xué)生書卷的分析。算法4所示代碼對(duì)這一流程進(jìn)行了展示。
算法4:格式分析程序自動(dòng)生成
Dim tf As Scripting.TextStream
tf=fso.OpenTextFile(“d: extfile.txt”, Scripting.IOMode.ForAppending, True)
tf.WriteLine(“imports microsoft.office.interop.word”)
tf.WriteLine(“sub main()”) ‘(byval cmdargs()as string)”)
tf.WriteLine(“dim studentfile as Microsoft.Office.Interop.word.Document”)
tf.WriteLine(“studentfile.activewindow.selection.font.name= “)
tf. WriteLine(Font_Name)
Office文檔的排版是要求學(xué)生掌握的一個(gè)基本操作。本文以word文檔排版為例,對(duì)如何提取word文檔的格式信息、格式信息的存儲(chǔ)、格式信息的讀寫等問題進(jìn)行了討論,為有效的生成格式分析程序提供了參考。采用生成的格式分析程序?qū)ord文檔進(jìn)行自動(dòng)分析可以有效的降低閱卷工作的強(qiáng)度,提高閱卷工作的效率。