张洪伟 张海兰 郭雁
摘 要:针对城市规划成果文档的审核的复杂性问题,提出了构建以COM技术为基础,并以Word文档为主要处理对象的审核辅助系统的解决方式。首先给出COM组件技术在Word文档处理中的应用,其次详细说明了成果文档审核辅助系统中的关键实现,包括表格审核的处理算法和实现过程,以及文本信息的查找和数字信息的提取方法。对于Word对象模型处理中的主要编程模式、Word表格信息处理方法和正则表达式在信息提取中的应用,该文也进行了论述。在系统实际使用的过程中,证明该系统可以完成审核总工们的基础繁复的审核工作。
关键词:城市规划成果 表格审核模块 COM技术 系统设计
中图分类号:TP3 文献标识码:A 文章编号:1674-098X(2015)08(a)-0079-03
随着我国经济的不断发展,城市规划建设的步伐也不断加快,对城市规划成果文档的审核工作要求也越来越高[1]。在规划项目的审核过程中,每个城市规划项目都要求规划单位必须提交城市规划设计成果,规划方设计成果包括大量的城市信息,例如城市建设用地分类,建设用地标准等[2]。大量的规划成果和规划信息使得研究院的工程师在审核文档的过程中的工作变得异常的繁重。成果审核中较为基础的工作是比较机械、繁复的,它不仅仅是文档内容关键字的审核,还要对文档中附表的内容进行审核,包括表格内容的完整性,表格内容数值的正确性[3]。这些工作在工程师进行大量的文字比对过程之后极其容易发生错误,导致表格中数字与城市规划标准的不匹配,导致规划项目的失误[4-5]。
以上问题都是随着城市规划项目的蓬勃发展所引起的。因此,为解决审核过程中一些繁复的基础工作和人工手动地文档审核过程中的诸多不便[6],开发了基于Word对象模型和COM自动化技术的软件。本系统的适用客户主要面向与城市规划审核工作相关的工程师,帮助他们简化人工审核过程的复杂任务和容易忽视的错误。指导顺利进行下一步工作。
1 系统设计
1.1 系统总体设计构架
系统整体基于微软的COM自动化技术,结合Word的对象模型,在PIA(Primary
Interop Assemblies)技术对对象模型的抽象基础下,结合c#语言进行客户端桌面系统的本地开发。整个系统是针对上海同济城市规划设计研究院的院规程文档审核进行设计的,主要包括以下几个模块:本地存储模块,目录比对模块,关键字查询模块,表格审核模块,多文档查询模块。
1.2 系统功能模块划分
1.2.1 本地存储模块
该模块存储作为标准比对文档的规程文档,用户自行输入的关键字,以及人工录入的用地规范信息。此模块作为人工交互输入的选择项,以本地.ini文件存储。
1.2.2 目录对比模块
该模块中规程文档作为比对的标准文档,来自全国各地的规划设计成果文档作为目标文档,进行规程文档目录与成果文档目录的对比,其中目录为三级结构,利用Word对象模型中的TreeView对象对目录进行层级显示,给出目录的比对结果包括缺失目录项,多余项以及错误目录项。其中对于缺失、错误或多余项进行不同颜色的高亮显示。
1.2.3 关键字查询模块
该模块对用户选择的关键字进行成果文档全文档的搜索,将所有的需查找的关键字及周围文本信息显示,并高亮显示所查关键字,给出每一个关键字在文档中出现的页数行数。同时保留数值单位信息,以此来满足操作人员利用搜索到的关键字信息与从系统本地检索出的关键字规范信息进行人工比对,找出成果文档中的不规范信息。
1.2.4 表格审核模块
该模块对于有关用地面积的表格进行审核计算。由于成果文档所包含的表格类型繁杂,不能统一的确定一种对表格进行计算审核的策略,故此部分只针对如表1用地面积表进行计算核查。核对子项做和之后与主项是否一致,不一致给予操作人员提示。
1.2.5 多文档查询比较模块
该模块给操作人员提供多视图的有关规程文档,成果文档的关键信息比对,展示出不同文档关键字及其关联的信息,并给出关键字的数值对应信息,操作人员可以从对比视图中了解到不同文档下关键字信息(如:居住用地)的数值信息。同样的在信息展示的过程中,会对关键字进行高亮显示,给出关键字在文档中的页数行数信息,以便操作人员从文档中核实信息。
2 关键实现
在表格计算审核过程中,主要审核的内容是如表1中居住用地,代号为R的表项的内容与其余前缀为R的表项,如二类居住用地(R2)和三类居住用地(R3)内容之和是否一致。实现的难点在于表格的格式可能是变化的,要选择一种方法去找出如居住用地这样需要计算表项之和的项,以及识别出它的子项并计算其和。在此部分实现之前,考虑过一种用表项的代号去识别,但是由于大量出现如表1中A2,其计算和的项却是A31,A32的情况,正确的表示应该是A21,A22。即表项代号不能作为识别标签。
(1)伪代码。
startLocation=计算起始项//startLocation[0]代表行数,startLocation[1]代表列数
columns=计算列数
根据计算列数和计算起始项开始表格计算:
Function calTable(startLocation,columns,dataGridView) //dataGridView为输出计算结果的GridView控件
Begin
tableLine = dataGridView.Rows.Count
for i = 1 to columns
line = startLocation[0]
while(true) do{ //循环计算一个主项
itemNumber = 判断当前位置主项类别
if(itemNumber不表示为主项){
line = 继续寻找到主项返回行数}
column = startLocation[1]
line = calculateSum(line, colunm, tableLine)
//计算位置为(line, column)的主项和,输出在//dataGridView的第tableLine行
if(lineInfo.count != 0){
tableLine = lineInfo.Max()
清空lineinfo}
tableLine++
if(访问到表格最后一行)
then break}
end while
end for
End
对于某一主项计算其相应子项和:
Function calculateSum(i,j, tableLine)
Begin
i++, j++ // i和j各加1,寻找下一个次主项
sum = 0
count = 0 //记录主项中次主项的个数
while(true) do
Newline = 0
value = 获取单元格的数值
sum sume + value
if(当前项为主项){
count++
newline = calculateSum(i , j ,count +tableLine)
i = newLine}
else then i++
if(当前主项计算完毕) then return i //标识当//前非主项的行数并返回
end while
End
以上伪代码表示了对于在某一计算列数和计算起始项的条件下,对于规划院提供的表格进行计算的过程,其中calculateSum是核心实现。如表1中的多级主项(公共管理与公共服务设施用地→文化设施用地),通过对所有主项形成的主项树进行递归计算实现了整个表格完整的计算过程。
(2)表格计算具体流程图和系统实例展示如图1,图2。
3 结语
由于结合了规划成果文档审核总工的经验,该系统具有较高的可应用性。给面对繁杂庞大文档审核工作的审核总工提供了良好的作业工具。它虽然不能代替总工对于一些专业技术方面问题的辨别,但可以利用本套辅助系统完成一些比较机械、繁琐的工作。本系统已经在上海同济城市规划设计研究院得以应用,给设计研究院的审核总工在低级错误的查找方面提供了较大的方便。系统经过实际的应用,证明其可以辅助审核总工们完成部分基础繁复的审核工作,系统响应速度快,运行稳定。
参考文献
[1]Ming-hu F.Application of OLE and word object model in development of general test questions library management system[J].Computer Engineering and Design,2007,28(10):10-13.
[2]韩小月,骆丽.基于VC的电子白板软件Word保存格式实现[J].计算机应用与软件,2013,30(4):26-27.
[3]Wen-gui C.Word Operation Problem of Automatic Grading System[J].Computer Knowledge and Technology,2013,9(13):3146-3147.
[4]TANG Ke-ming,CHEN Ling.Design and implementation of automatic Word paper marking system[J].Computer Engineering and Applications, 2008,44(35):69-72.
[5]李美满,夏汉铸,易德成.基于COM技术的通用考试系统的设计与实现[J].计算机工程与应用,2007,43(1):245-248.
[6]刘广志.基于WORD文档的电子公文审批系统的设计与实现[D].山东大学, 2013.