APP下载

基于Excel VBA实现观测日志自动生成

2020-12-28周志赵希磊樊冬朱厚林刘浩

电脑知识与技术 2020年33期

周志 赵希磊 樊冬 朱厚林 刘浩

摘要:地震台站值班人员在日常工作中,需要填写多种仪器的运行观测日志和值班日志,在手工填写时,普遍存在过程烦琐、信息易错漏等问题,为解决这类问题,使用Excel VBA编写了观测日志自动生成程序,并应用于日常工作中,實际应用表明,该程序实现了观测日志的批量化、自动化、标准化产出,减轻了值班人员负担,提高了日常工作效率。

关键词:Excel VBA;观测日志;自动生成

中图分类号:TP311 文献标识码:A

文章编号:1009-3044(2020)33-0224-03

开放科学(资源服务)标识码(OSID):

1 背景

在佛子岭地震台,值班人员每日都需要填写前一日5套地震监测仪器(BBVS-60地震仪、VP宽频带倾斜仪、vs垂直摆倾斜仪、RTP气象三要素仪、GS2000电磁扰动仪)运行日志和值班工作日志(WORD格式,下简称日志)。惯例上,值班人员需要在各日志模板上填写前一日相关信息和仪器监测数据图件,并保存为带时间标记的日志文件。这一过程的突出问题表现为填写烦琐、易错漏信息、工作效率低等。若能够开发一款日志自动生成程序,实现日志产出自动化、批量化、标准化,则可使日志产出过程更加便捷高效,减轻值班人员的负担,同时增强产出日志的规范、统一性,具有一定的现实意义。

2 程序分析

虽然许多程序语言(VB、C语言、JAVA等)都可实现日志文件的自动生成,但是由于要生成的日志文件格式是WORD格式,所以我们使用MS Office自带的VBA语言进行二次开发,可以实现程序开发更简单便捷,开发出来的程序适用性更好(免安装、分享性、移植性强、操作简单,使用方便)[1]。

Visual Basic for Applications,简称VBA,是Visual Basic的一种宏语言,是微软公司开发出来在其桌面应用程序(如MSOffice)中执行通用的自动化(OLE)任务的编程语言。在MS Of-fice中,VBA具有强大的对象控制能力,功能的扩展及定制能力,MS Office中的绝大多数手工操作,都可以用简单的VBA程序自动完成,多应用于处理Excel数据、修改表格格式、批量排版Word/PPT文件、关键信息排查、实现自动批量打印,甚至抓取网页数据、对接外部数据库、调用Windows系统功能等[2-4]。

3 程序设计

3.1 设计思路

我们将程序编写分为两个部分:第一部分是软件界面布局的设计,第二部分是代码的编写。从数据流的角度考虑,可以将程序分为三个部分:第一部分是日志关键信息的输入;第二部分是数据的处理;第三部分是日志文件的自动生成。

程序流程大致如下(流程图见图1):在指定目录存放日志模板,并将模板中相关信息标记为特殊字符串,在日志生成之前,在EXCEL工作表中录入相关信息,在指定目录存放指定文件名的JPG格式图片,点击“自动生成观测日志”按钮后,程序自动将模板文件的特殊字符串和图片替换为刚录入的信息和刚存放的图片,并将生成的日志自动按固定名称格式存放在指定目录,并提示日志已自动生成。

3.2 程序输入界面的设置

以VP倾斜仪运行日志为例,其他日志同理。首先创建一个EXCEL文件,将表sheetl重命名为日志自动生成,使用分组框和命令按钮,设计程序输入界面(图2)。输入的信息包含日期、星期、天气、值班员、复核员、系统状况、环境状况、数据概况、报送情况、干扰情况、其他等,部分信息输入使用下拉菜单选择输入,以减少错漏。将命令按钮重命名为“自动生成仪器运行日志”,双击“自动生成仪器运行日志”按钮,输入程序代码。待代码输入完成后,点击“自动生成仪器运行日志”按钮,即可自动在指定目录产出日志。

在EXCEL文件所在目录,建立三个目录,分别是./outdoc/,输出库,存放自动生成的日志文件;./temdoc/,模板库,存放日志模板,模板中相关信息使用特殊字符串表示,并与EXCEL文件中输入的信息一一对应,如{officer)表示值班员名称、(weath-er}表示天气信息,等等;./picdir/,图片库,存放需要插入模板的图片文件,图片命名需要规范,如vp.jpg表示VP倾斜仪前一日的数据曲线图,等等。

3.3 指定字符串的更换

当在EXCEL表中输入信息完成后,使用VBA中wapp.Doc-uments.Open、.Find.Execute FindText等命令对模板文件进行打开、查找并替换字符串的操作,从而达到日志信息输入的效果。代码如下:

Dim temdocpath, picdirpath, outdocpath, wapp, myrange,vpmbdoc,vpdoc '定义参数

temdocpath=ThisWorkbook.Path&”\temdoc\” 模板库路径

picdirpath= ThisWorkbook.Path&”\picdir\" '图片库路径

outdocpath= ThisWorkbook.Path&”\outdoc\”'输出库路径

vpmbdoc= Dir(temdocpath&”WP运行日志.docx”)'VP模板文件路径

If vpmbdoc<>””Then '如果模板文件存在

Set wapp= CreateObject(”word.application”)

Set vpdoc= wapp. Documents.Open(temdocpath&vpmbdoc)'打开VP模板文件

wapp.Visible= False 'WORD文件不可见

Set myrange= wapp.ActiveDocument.Content '设置要查找、替换的范围

myrange. Find. Execute FindText:=”{officern Forward: =ture,Replacewith:=Sheetl. Cells(5,9),Replace:=wdReplaceAIl '将模板内所有字符串{offcer)替换为15单元格内容

myrange.Find.Execute FindText:=”(weather}", Forward:=ture,Replacewith:=Sheetl.Cells(5,7),Replace:=wdReplaceAII '将模板内所有字符串{weather)替换为G5单元格内容

3.4 指定图片的更换

当日志信息输入完成后,使用VBA中.InlineShapes()、.In-lineShapes.AddPicture等命令对模板文件中图片进行查找、替换为指定图片的操作,从而达到日志图片输入的效果。代码如下:

Set picl= vpdoc.InlineShapes(l)找到模板文件中第1张图片

Set rngpicl=vpdoc. Range(Start: =picl. Range. Start, End:=picl.Range.End)'获取第1张图片的位置

picI.Delete '删除第1张图片

vpdoc.InlineShapes.AddPicture picdirpath&”\vp.jpg”, linkto-file:=False, savewithdocument:=True,

Range:=mgpicl '在第1张图片位置插入图片库中vp.JP9图片

Set pic2 =vpdoc.InlineShapes(2)'找到模板文件中第2张图片

Set rngpic2=gsdoc. Range(Start: =pic2. Range. Start, End:=pic2.Range.End)'获取第2张图片的位置

pic2.Delete '删除第2张图片

gsdoc.InlineShapes.AddPicture picdirpath&”\qx.j pg', linkto-file:=False, savewithdocument:=True,

Range: =mgpic2 '在第2张图片位置插入图片库中qx.jpg图片

3.5 生成的日志文件自动存储

当日志信息和图片输入完成后,使用VBA中wapp.ActiveD-ocument.SaveAs、MsgBox等命令将生成的日志另存为固定格式文件名的日志文件,并提示日志已产出。代码如下:

wapp.ActiveDocument.SaveAs outdocpath&”VP倾斜仪运行日志”& Sheetl.Cells(5,2)&SheetI.Cells(5,3)&SheetI.Cells(5,4)'将生成的日志以固定格式的名称存放到输出库

vpdoc.Close '关闭模板

Set vpdoc= Nothing

wapp.Quit '退出WORD

MsgBox”VP倾斜仪运行日志已生成”'提示日志已产出

4 程序运行效果

利用模板(图3),通过以上方法,程序自动生成的仪器运行日志(圖4)。可以看到,自动生成的日志格式规范、信息准确、方便快捷。其次,使用相同的方法,可以同时实现其他型号仪器运行日志和值班日志的自动化、批量化、标准化产出,可以大大减少人工打开、修改、保存文件操作,从而减少人工操作失误。目前,该程序已在我台正常稳定运行,达到了预期的设计要求,满足了日常工作的需要,也可在其他类型日志产出工作中推广和使用。

5 结束语

本文主要介绍了利用EXCEL VBA实现观测日志自动生成,解决了一直以来手动填写观测日志的各种弊端,有效实现了日志产出过程的简便化、规范化、自动化和批量化,减少重复操作和失误,降低工作强度,提高工作效率。而且VBA编程语言嵌入在MS Office 2000软件以上各个版本中,编写的VBA程序之间相互兼容,推广适用性较好。同时可根据实际需要,将结构化的信息存人Access数据库,以备查询。

参考文献:

[1]罗刚君.Excel VBA程序开发自学宝典[M].北京:电子工业出版社,2009.

[2]冯桂尔.基于Excel VBA的测试系统模板制作和成绩统计分析[J].电脑知识与技术,2014,10(34):8146-8147.

[3]崔子健.基于Excel VBA的考勤表自动生成程序[J],电脑知识与技术,2019,15(8):40-41,53.

[4]齐丽莉.VBA在成绩管理中的应用与设计[J].电子技术与软件工程,2019(1):158-159.

【通联编辑:谢媛媛】

作者简介:周志(1986-),男,安徽枞阳人,工程师,学士,研究方向为地震监测预报。