摘要:毕业论文管理类的自由软件越来越多,但结合MSWord实现论文格式在线审改功能的却很少。文章利用VBA技术,展示对于Word文档的文本格式自动化审改的思路、方法与关键代码。
关键词:VBA;毕业论文在线管理;格式规范自动化;
On VBA-based and ASP-based Textual Format Automation of Graduation Thesis
Abstract:Although more and more free softwares concerning graduation thesis management are beingdeveloped,few can fulfill textual format automation based on MS Word.The paper shows how to achieveVBA-based textual format automation in terms of its idea,method and key codes.
Keyword:VBA;online management of graduation thesis;textual format automation;
1 引言
毕业论文的管理是一项极其繁琐的系统性的工程,随着计算机技术和网络技术的普及与发展,高校已基本在一定程度上实现了毕业论文的计算机管理或网络化管理,显着提高了毕业论文管理的效率,释放了管理人员大量的精力与时间。原本纸质材料的交流转化为电子文档的交流,如论文撰写规范、进度安排等规定与要求的下发与收阅,都大大节约了管理成本。然而几乎所有高校目前采用的基于计算机或网络的论文管理系统,其设计与开发的指导思想,只是为了把毕业论文常规工作中浩繁的组织管理工作集约化和平台化,因而呈现的主要是组织管理方面的功能,如论文选题的审定、指导任务的分配和论文成绩的统计。这样的管理系统,最终是仅仅为组织管理人员服务的,难以做到真正地全程管理。
毕业论文管理工作的主要进程是师生间的互动,具体任务是指导毕业生完成合乎规范要求的毕业论文。因此,一个好的毕业论文管理系统,必须是全过程的,也必须是多面向的。多面向是指不仅面向管理人员的组织工作,也应面向师生间的互动,面向毕业论文的规范要求,面向教师具体指导进程中的便利。毕业生(尤其是英语专业毕业生用英语)撰写毕业论文,难免因格式不规范,给具体的指导进程带来烦扰。最为常见的是,学生不善设置各级标题的大纲级别,因而导致目录不能自动生成。而面向毕业论文的规范要求,面向具体指导的便利,就要求管理系统能够实现论文格式规范性的在线审改。
2 可行性分析
2.1 Word文档的VBA可控性
毕业论文一般都是用文字处理软件MS WORD撰写,该软件具有可定制性和编程开放性,可通过VBA(Visual Basic for Application)进行功能的扩展和对文档中所含对象如字符、段落、图表等进行编辑操控。
VBA是基于VB(Visual Basic)发展而来的,是VB的一个子集,是微软专门针对于MS Office设计的开发语言,主要用于拓展MS Office的功能,仅由MS Office的组件如MS Word,MS Excel等称为VBA的宿主(host)的应用程序来调用,也就是说,不能在一个独立地环境中运行VBA,也不能使用它创建独立的应用程序。
VBA具有其特有的对象、属性和方法,如:Document对象用来引用一个文档,Characters、Words、Sentences、Paragraphs等对象分别用来引用文档中的字符、单词、句子和段落集合,而Sections对象用来引用文档中的节的集合,等等;各个对象都有一系列的属性和方法,通过访问这些属性或调用这些方法即可实现对各个对象的操作。
2.2 毕业论文各组成部分的可识别性
毕业论文的格式规范化方面,虽然各高校各学科的规定要求不尽相同,甚或不同届别之间也有调整和变化。但对于某一特定高校的特定学科而言,对于所有当届毕业生的毕业论文撰写,在格式上都会有统一的规范要求,实质上是一个格式文本。就格式而言,论文格式规范的基本要件大都是:目录、中英文摘要及关键词、各级标题、正文及图表、参考文献等部分。
对于VBA编程来说,毕业论文的页面、页眉、页脚、图片、表格、图表等都是文档所含的不同类型的一个个对象,各个类型的所有对象可进行相同设置或按奇偶页分别设置。但文档主体的文字部分如各分级标题和正文段落的逐一识别与区分却似乎是个难题。其实,摘要、关键词、注释和参考文献等部分已有可识别的显着标记,如“摘要:(Abstract:)”、“关键词:(Key Words:)”等。至于各分级标题,也都存在着较为显着的可识别标记:各分级标题自成一段,且始于特定序号,如一级标题通常始于“1”,二级标题通常始于“1.1”等等,而无标记的段落则视为正文段落。
3 功能的实现
本文将以英语专业本科论文的格式为例,演示VBA操控Word文档实现自动审改论文格式的程序。限于篇幅,本文将仅呈现关键代码部分。该功能为我校英语专业毕业论文在线管理系统中的一部分,管理系统的运行环境为ASP.Net2.0,编程语言为VB。
代码中设wdDoc为正操作的MS Word文档,且所有属性或方法都以wdDoc.Application.Selection为操作对象。
审改文档格式的规范性,首先要考虑到学生有可能存在的不良编辑习惯。如通过空格实现似是而非的首行缩进或居中,又如通过连击回车以连续空白段落塞至新一页实现换页,等等。因此,第一步就是要删除冗余字符,以下为删除连续半角空格字符的实例。替代相应的查找字串(FindText)和替换字串(ReplaceWith),即可删除连续的换行符等其它冗余字符。
3.1 封面页
毕业论文封面单独成页,也应在Word文档中单独成节,且要素明确,一般包括题目、学生姓名、系别、专业、学号、班级、指导老师及完稿年月。这些要素,作为毕业论文在线管理系统,后台数据库里当然都有准确数据。因此,学生提交的文档中如不含封面页,完全可通过VBA程序自动配上。文档中如已含封面页,为确保数据格式的精确统一,也可删除而另配。可在服务器端存放一预制的空白封面页文档(姑且称之封面模板),以备调用。
封面模板以表格嵌套方式制作(如图1),各空白单元格为各项待填数据,务须选中整个单元格进行字段样式的设置,以使各部分皆可精确定位,确保版式美观。各空白单元格内设定书签,以便于程序自数据库中读取并插入相应项目的待填数据,且使程序代码更加简洁。
1.检查并删除已有封面:
其中,sTitle为论文题目变量。
2.插入封面页:
3.2 主体部分
毕业论文的主体部分,如我校英语专业的本科毕业论文,是按顺序由下列部分构成:致谢、英文摘要及关键词、中文摘要及关键词、正文和参考文献。
3.2.1 各组成部分的判断
通过整数变量如nStart及nEnd对应所选区域的始末位置。
致谢(Acknowledgements)、中英文摘要(包括关键词)及参考文献(Works Cited)三部分各为统一规定的标题行,因此,可通过执行Find.Execute命令得到的返回值(布尔值)来判断主体部分中是否存在相应的部分。当然,在判断时,还要考虑到英文异体词如Acknowledgements的异体词为Acknowledgments,以及学生的误写或别体,如Works Cited被写成Works cited或Work cited或WorksCited等形式。判断参考文献的关键代码为:.Find.Execute(FindText:="[^11^12^13]Work[s]{1,2}[Cc]ited^13",MatchWildcards:=True)其中,^11为手动换行符,即所谓的“软回车”,^12为手动换页符,^13为段落标记,即所谓的“硬回车”。
正文部分须甄别出各分级标题。每一级标题的序标都会有统一的规定,这也就为程序的自动甄别提供了识别标记。如我校英语专业的本科毕业论文的分级标题的序标统一采用阿拉伯数字标注法,分别为“1.Abcde”、“1.1 Abcdef ghij”、“1.1.1 Abcd efgh ijklm”……,此外,各分级标题为一句成段,这样可用以下语句判断所在段落是否为三级标题:If Regex.IsMatch(Left(Trim(.Text),7),"[1-9][..][1-9][..][1-9][.."&Chr(9)&"][A-Z]")And.Range.Sentences.Count=1Then
其中,Regex.IsMatch是Asp.Net的正则表达式匹配命令,返回布尔值;"[1-9][..][1-9][..][1-9][.."&Chr(9)&"][A-Z]"为三级标题的前7位字符,即“1.1.1”加上第七位的大写字母,.Range所指向的Selection为某一整个段落,段内应该仅含1个句子。
相应说来,一级标题的判断语句则为:
If Regex.IsMatch(Left(Trim(.Text),3),"[1-9][.."&Chr(9)&"][A-Z]")And.Range.Sentences.Count=1 Then
3.2.2 字段格式审改
VBA中字段格式的操作对象分别为font和paragraph,各有系列属性用于设置或获取相应的值。如:
3.2.3 分节分页与页眉页脚
毕业论文在几大组成要件如封面、致谢、摘要、正文(含参考文献)等齐全时,整个文档应至少分为三节:(1)封面独立成节,无页眉页脚,自然就没有页码;(2)致谢、中英文摘要及目录组成第二节,页脚应为小写罗马数字的页码;(3)正文(含参考文献)构成第三节,页脚为阿拉伯数字页码。各节的页眉页脚必须断开与前一节的链接。
分节分页符审改例举:
文中查找字串“Acknowledgements”,找到时该字串处于选中状态,方法.Collapse()可使光标处于选定区域的起始位置,即“A”之前;获取当前光标位置即.Start值,如大于2,则前有封面页;通过方法.Set Range(nStart,nEnd)选定之前一个字符,判断是否分节符或分页符;如仅为分页符则删除之,插入分节符.InsertBreak(Type:=WdBreakType.wdSectionBreakNextPage)。
同理,在正文标题前再插入一分节符,在必要的地方插入分页符(将上一方法中的Type值改为WdBreakType.wdPageBreak)。
页眉页脚审改例举(第二节页脚设置的关键代码):
3.3 目录
毕业论文的目录部分一般处于固定位置,例如处于第二节之末,第三节即正文之前。这一部分本应在设置各标题段落相应的大纲级别之后,通过插入目录由MS Word自动生成的。但很大一部分学生不善于设置段落的大纲级别和页面的页眉页脚,因此,这也是学生排版最易失之规范的部分。不少学生手工输入目录,且不说左端缩进随意,右端更难对齐,更大的弊端是,一旦其它部分出现与标题或页码相关联的改动,难以反馈给目录的更新,致使目录及所标页码与实际情况失去对应。本文主张采用封面页的对策,即检查是否已有目录,如已存在,则删除,再由VBA程序自动生成在规定位置。
关键代码如下:
4 结语
毕业论文管理一类的程序编写起来并不难,但真正做到全程管理的却不多,而这应该也正是论文管理系统类软件的趋势所在。毕业论文组织管理工作虽千头万绪、极其繁杂,但数据统计、任务分配与验收之外,更加长线的却在于与Word之类的文字处理软件的亲密接触。论文的撰写与审阅固然离不开Word软件,指导教师最终按要求提交的汇总材料又何尝离得开Word类型的文字处理软件。
本文旨在抛砖引玉,所依据的毕业论文在线管理系统虽然已在使用之中,却仍然存在诸多问题,例如格式审改中对于参考文献的标注的审改功能尚不具备。然而,无可否认,一方面,毕业论文本身是一种格式文本、教师上报的汇总材料亦应为格式文本。另一方面,MS Word具有良好的功能拓展开放性,以及VBA与之无缝衔接的操控性能,两者的结合,使得论文管理系统本应发挥出更加强大的功用。此外,随着Google、Software等公司越来越积极主动的技术贡献,在线文字处理功能越来越得到淋漓尽致的发挥,笔者坚信,毕业论文在线管理系统将会主动承担越来越多低智能的操作,剩下给老师的只是对于论文逻辑的理性的评判。
参考文献
[1]邵小兵,廖慧芬利用VBA实现Word自动排版[J]中国教育技术装备,2005,(10):45-46.
[2]杨晓亮.Word VBA高效排版范例应用[M]北京中国青年出版社,2005:109-127.
[3]符谋松、李富芸基于VBA技术的本科毕业论文质量监控系统研究[J]现代计算机,2009,(9):142-145.
[4]吴建军基于.Net和WebService的本科毕业论文全程管理系统的设计与实现[D].成都:电子科技大学2008.