word文档格式自动分析方法
2021-06-22张广梅朱红梅
张广梅,朱红梅
(山东农业大学信息科学与工程学院,山东 泰安 271000)
0 引言
计算机文化基础是高等教育的基础课程[1]。Office办公自动化软件的使用是计算机文化基础的重要内容之一。为了更有效的对学生的学习效果进行检查,计算机文化基础的考试应经采用无纸化的考试方式进行。针对office软件的特点,在考试过程中,通常都是给出排版要求,学生根据排版要求对指定的文档进行排版,最后提交排版之后的文档。通常情况下,教师根据排版要求对学生提交的文档进行人工检查。这样做不仅工作量大,而且由于每个教师的评分尺度不同,无法客观公正地对学生的学习效果进行评价。为解决这一问题,很有必要开发office文档的自动分析系统[2-3],一方面可以大大降低教师的阅卷工作量;同时可以有效地避免因评分尺度不同所造成的学生成绩的差异。本文以wod文档为例,对word文档自动分析程序中所涉及的相关问题进行了讨论。
1 word文档格式自动分析基础
1.1 Word对象模型
Word文档编辑过程中所涉及的每一项内容都是一个对象,这些对象的相互关联组成了Word中的对象模型[4]。也就是说,在Word文档中,文档、对话框、文本框、图形、图表甚至应用程序本身都是对象[5],同时,这些对象都有自己的属性和方法,因此,可通过程序来访问word文档中的这些对象,完成文档格式的自动分析。
1.2 常见的VBA对象及其属性分析
1.2.1 利用font对象获取文字的排版格式
Font对象代表指定对象的字符格式。在对office文档进行排版的过程中,经常需要对指定的文件的格式进行设置。文字格式包括字体、字形、字号、字体颜色、字符间距等。在word文档进行分析时,要获取文字的字体设置信息可以通过读取Font对象的相关属性完成。表1对Font 对象的相关属性进行了介绍。
表1 Font 对象的相关属性
1.2.2 利用ParagraphFormat对象获取段落的排版信息
段落排版的相关信息存储在Paragraph对象中。代表整个WORD文档的Document对象具有Paragraphs属性,它是文档中所有Paragraph对象的集合,该集合包含指定文档、区域或所选内容中的所有段落,该集合中的每一个元素代表了一个Paragraph对象,一个Paragraph对象代表了文档中一个段落。Paragraph对象具有format属性,通过读写Paragraph 对象的format属性,可以获取到一个ParagraphFormat对象。ParagraphFormat对象记录了段落的所有格式信息。表2列出了ParagraphFormat对象的相关信息。
表2 ParagraphFormat对象的部分属性
1.2.3 利用Font对象和Sections对象获取边框和底纹的排版信息
边框和底纹的处理也是在word文档排版过程中的常用的基本操作。边框和底纹主要包括文字边框、文字底纹和页面边框。文字的边框和底纹记录在Font对象的相关属性中,而页面边框记录在Sections对象的相关属性中。表3列出了记录相关排版信息的对象及属性。
表3 边框和底纹的属性列表
1.2.4 利用TextColumns对象获取文档的分栏信息
分栏设置的相关信息可以通过TextColumns对象获得。TextColumns对象是文档中TextColumn对象的集合。通过访问Document.Pagesetup.TextColums 的属性,可以获取word文档中的TextColums的对象。表4中列出了TextColumn的属性,通过读取这些属性可以获取相应的分栏信息。
表4 分栏的属性列表
1.2.5 利用Dropcap对象获取首字下沉的相关信息
首字下沉的相关信息存储在Dropcap对象中。Dropcap对象代表段落中格式为首字下沉的大写字母。通过访问文档对象的Selection.Paragraphs(i).DropCap的属性可以获取文档中的第i个段落的实现首字下沉的Dropcap对象。表5列出了Dropcap对象的相关属性。
表5 Dropcap对象的相关属性
1.2.6 利用Shape对象获取艺术字格式的相关信息
艺术字属于图形的一种,艺术字格式信息存储在Shape对中。该对象可以通过访问Document对象的Shapes属性获得,Shapes属性是word文档中所有Shape对象的集合,每个Shape对象对应一个图形。因此,可以通过Document.shapes属性获取文档中的Shape对象集合。在此基础上,通过读取表6列出的属性,获取关于艺术字的排版信息。
表6 艺术字的属性列表
2 文档排版参数的自动提取
2.1 创建存储标准答案数据库
文档格式的自动分析需要分析程序的支持[6]。为达到自动分析的目的,需要根据文档的排版要求,需要从标准文档(标准文档是指已经按照排版要求完成排版操作的文档)中将文档的排版参数提取出来,并以此为依据,用来对学生的考试文档进行评测。为提高学生文档格式自动分析的效率,可以先将文档的排版要求记录在ACCESS数据库中,表7类出了关于字体设置的相关信息(针对其他排版要求的数据的存储方式与下表类似)。
表7 字体信息表
2.2 排版参数的获取
2.2.1 排版参数的设置
在从标准文档中提取排版参数之前,首先要指定需要提取的要素。图1给出了关于文档中文本的字体等相关排版参数的选择的操作界面。
图1 字体参数设置
2.2.2 排版参数的提取
在设置好排版参数之后,接下来就可以从标准文档中进行参数的提取工作。算法1列出的示例代码完成排版参数的提取。
算法1 字体信息提取
Dim t As Microsoft.Office.Interop.Word.Document
t = GetObject(“f:标准答案.doc”)
t.ActiveWindow.Selection.Find.Text = Textbox1.text
If t.ActiveWindow.Selection.Find.Execute() Then
select_name = t.ActiveWindow.Selection.Font.Name
Endif
算法1:给出了相关文本的字体信息的提取过程。可以参考上述过程完成排版参数的提取。
2.2.3 排版参数的存储
为提高文档格式自动分析的效率,可以将提取到的参数写入到标准答案数据库中,为后续分析程序的自动生成准备好数据[7-8]。算法2中的示例代码完成了向数据库中写入排版参数的过程。
算法2:排版参数写入数据库
mYpath = “f:文档Ì自动分析.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)
3 格式分析文档的自动生成
在提取完格式参数之后,接下来可以根据提取到的数据生成格式分析程序。格式分析程序包含以下几个部分:(1)读取标准文档参数数据库,获取阅卷参数;(2)利用读取的阅卷参数,依次分析每个学生的答题文档,根据分析的结果计算每个知识点的得分,将每个同学的得分情况写入得分数据库中;重复执行(2),直到分析完所有学生的文档。下面对文档分析程序中的关键问题进行讨论。
3.1 读取阅卷参数
对office 文档的阅卷操作就是检查学生有无按照要求完成排版操作。根据前面的介绍,在对标准文档进行分析时,已经将相应的排版信息存储在数据库中,因此在阅卷之前,需要读取ACESS数据库中存储的阅卷参数,以此来指导阅卷工作。算法3中的示例代码展示了读取ACEESS中的数据库的过程。
算法3:访问ACESS数据库
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)
3.2 生成word文档格式分析代码
为完成学生试卷的自动分析,必须将要生成的格式分析代码以文件的形式进行存储。为将生成的格式分析代码写入文件中,在格式分析程序的生成过程中,首先创建文本流对象,接下来,依次将完成格式分析的代码写入这个文件中。由于一场考试中有多人参加,因此,在生成的阅卷程序中,首先要指定存放学生试卷的文件夹,然后,依次读取文件夹下的每一文件,并从文件中提取需要的格式信息,并将读取的结果与上面读到的标准结果进行比较,完成对学生书卷的分析。算法4所示代码对这一流程进行了展示。
算法4:格式分析程序自动生成
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)
4 结语
Office文档的排版是要求学生掌握的一个基本操作。本文以word文档排版为例,对如何提取word文档的格式信息、格式信息的存储、格式信息的读写等问题进行了讨论,为有效的生成格式分析程序提供了参考。采用生成的格式分析程序对word文档进行自动分析可以有效的降低阅卷工作的强度,提高阅卷工作的效率。