徐明喜
济南军区青岛第一疗养院 信息科,山东 青岛 266071
为适应体检业务的迅猛发展,我院自2009年引入体检管理系统,以提高效率、规范体检流程与体检档案管理。该体检系统利用设计好的Word模板,为每个体检人员导出Word格式体检报告。虽然所有体检报告均由同一个模板生成,但总会在版面上出现一些不尽人意的问题,这些问题除了影响美观,还有可能导致体检报告的页数增加,从而增加打印成本,有时能使体检人员对体检结果感到费解甚至导致误解。本着对体检人员负责、对服务质量负责的态度,门诊部专门安排一个人员对导出的电子版体检报告逐个浏览,对存在的格式问题手工清理后再打印交付。该过程工作量大、效率低,对工作人员造成极大的困惑,急需解决。
由于体检管理系统导出的电子版体检报告存放比较集中,便于选择、查找,适合批量处理。通过对体检报告出现的格式问题进行分析,发现这些问题的类型在报告中的出现位置等都存在一定的规律性,这有利于在优化处理软件的开发过程中控制软件代码的复杂度。虽然OFFICE文件的文档格式较复杂,不是简单的字符流,但微软公司提供了功能强大的OFFICE编程接口,通过在软件中引用相关组件(类库)[1~2],就能够满足功能处理需求。因此,开发相应的软件对体检报告进行批量、自动化处理具有可行性。
软件的设计思想是:操作人员指定需要优化处理体检报告、优化后报告的存放位置,以及对报告原件的处理方式,然后由软件自动连续完成报告的优化工作。由于需优化处理的报告数量可能很大,为防止操作人员误认为电脑死机,软件应在优化处理期间具有良好的人机交互界面。软件采用c#编写,在项目中添加Microsoft.Office.Interop.Word引用项[3~4]。
为方便操作,灵活应对使用中出现的各种任务需求,软件必须具有待优化报告的批量选择功能、反选功能和自由选择功能,从而能够以最简单、便捷的操作组合确定优化处理目标。
选定需要优化的报告文档后,逐个进行优化处理,完毕后保存于指定位置。每个报告文档主要进行如下优化工作。
普通文档空行,指Word中通过在“查找”对话框中输入^p符号,能够查找定位到的空行,是我院体检报告中出现最多的问题。这些空行有的是以一个或多个连续回车符的形式出现,有的是以数量不等的回车符和空白字符串混合出现。软件中可通过Find对象的Execute方法替换处理,代码如下:
其中,FindText为要查找的文本,ReplaceWith为替换文本[5]。该方法还可以完成报告中不合理或不恰当的描述字符串的替换(用新的描述字符串替换查找到的内容)或删除(用空串替换查找到的内容)。但在软件的处理流程中,最难处理的是随机数量的回车符和空白字符串混合出现的连续空行,为确保优化后报告格式正确,应遵循如下处理流程:首先清除连续空行中的空白字符串(FindText赋值为“^p^w^p” ,ReplaceWith赋值为“^p”),然后用单个回车符替换连续的两个回车符(FindText赋值为“^p^p” ,ReplaceWith赋值为“^p”)[6],并根据需要循环处理多次,直至没有连续的两个回车符存在。
如果需要对报告中的非空白字符串的进行替换或删除,则该操作应在清理多余空行前进行,因为在非空白字符串的替换、删除过程中,有可能会产生新的空行。
在Word文档中,表格外部上方相邻的一个空行(图1),表现形式与清理普通文档空行中连续的两个回车符形成的空行相似,但用2.2.1中提到的方法无法完成优化清理。通过在软件中读取该部分信息并分析发现,表格上方相邻一个空行形成的段落其长度为1,有别于其他段落,因此需要读取Word文档并查找表格上方长度为1的段落,删除该段落即可。软件中用到Paragraphs对象的Delete方法[7]。该操作的处理顺序应在清理普通文档空行之后进行。
图1 表格上方的相邻空行
报告中的表格有时也会出现空行,如表格层级的行,非单元格内部,空行可能包括一个或多个空白单元格(图2)。要清除表格中的空行,关键在于空行的准确判断。软件中利用Tables对象,分析表格每一行(Rows)的文本(Text)的内容及长度,针对本单位的体检报告模板及具体内容确定一个长度阈值,当Text无有效内容或Text长度<阈值的,可判定为空行,软件中通过Rows对象的Delete方法删除即可。
图2 表格空行
表格单元格的内容中可能存在空行,表现形式仍相似于2.2.1节中两个回车符形成的普通空行(图3),但也不能用2.2.1节的方法处理,分析发现,单元格内容以一个或多个段落(Paragraphs)形式存在,通过在软件中读取每个单元格的内部段落,清除非末段落中文本长度为1的段落,可成功清除单元格中除尾部以外的空行。分析还发现,尾部的空行(段落)比较特殊,其长度为2,值为“ a”,因此,只需清除单元格内容尾部的“ a”值即可清除尾部多余的空行。
图3 单元格内容中的空行
体检报告中,为了强调某些信息,使用了文字底纹,如果想取消某个位置的底纹,可在软件中指定该位置文字的唯一特征信息,优化处理时,一旦发现符合该特征的内容,便使用如下代码清除[8]:
Range.Font.Shading.Texture = Word.WdTextureIndex.wdTextureNone;
Range.Font.Shading.BackgroundPatternColor = Word.WdColor.wdColorAutomatic;
Range.Font.Shading.ForegroundPatternColor = Word.WdColor.wdColorAutomatic;
在每个报告的优化处理过程中,不可避免会利用循环的方法遍历文档中所有的段落或表格,在优化清理并删除一些内容后,段落或表格的数量、位置会立刻发生变化,处理过程中对当前段落或表格的定位需要调整,否则,可能会出现问题遗漏或软件运行错误。
该软件在我院已运行一段时间,优化处理了几万份体检报告,达到了操作简单、速度快、质量高、稳定、可靠的理想效果。优化后的档案无需人工核查可以直接打印提交,大大节省了人力和打印成本。
[1]崔建功.基于Office PIA自动生成Word文档[J].电脑知识与技术,2013,9(12):2899-2903.
[2]王秀丽,张晓.OFFICE文档对象编程实现文档数据自动处理[J].电脑知识与技术,2012,8(31):7495-7497.
[3]余艳艳,周明刚.VC++实现Excel操作自动化的方法研究与应用[J].企业技术开发(学术版),2010,29(2):7-9.
[4]王二暖.基于C#的Word2010文档自动生成系统[J].电脑开发与应用,2011,24(5):48-50.
[5]郭玲.一种Web报表打印方法的实现[J].计算机系统应用,2012,21(8):144-151.
[6]仝海燕,吕洪善.深层应用Word2007的查找与替换功能[J].电脑知识与技术,2013,9(12):2844-2845.
[7]陈雄山.Word文档对象分析与自动阅卷的实现[J].现代计算机(专业版),2010,(7):199-201.
[8]汤克明;陈崚.Word服务器的接口解析与文档属性提取[J].计算机工程与应用,2008,44(28):79-82.