基于OLE的Word文档自动生成技术在农业气象服务中的应用
2024-12-31于成孙磊成青燕
摘 要:随着现代农业的发展,各种新型农业生产经营主体对精细化气象服务的需求越来越迫切。因此,需要一种快速、准确的气象服务产品制作技术,以提高农业气象服务的效率和品质。利用OLE自动化技术和Word对象模型,可实现VB对Word文档的自动化操作。此研究以直通式农业气象服务产品制作为例,详细地介绍了Word自动化技术在农业气象服务中的具体应用。
关键词:OLE自动化;Word对象模型;VB编程;农业气象服务
中国分类号:TP317.1;S126 文献标志码:A 文章编号:1674-7909(2024)7-136-4
DOI:10.19345/j.cnki.1674-7909.2024.07.031
0 引言
众所周知,农业对天气、气候影响的反应最敏感,也因此而具有脆弱性。农业生产者不仅要考虑气候资源对作物生长适宜性的满足程度,也要考虑各种气象灾害对作物生长和农事活动的限制,由此做出最佳的农业布局和生产计划安排,以获得最高的农业生产收益。因此,现代农业中诸如农村合作社、农业基地、农业产业化龙头企业及专业种植户等新型农业生产经营主体对气象的精细化服务有着迫切的需要。与此同时,随着气象现代化建设的不断推进,综合气象观测能力和气象预报预测能力也不断提高。诸如卫星资料、雷达数据、地面气象观测数据、气象融合数据、智能网格气象预报数据等气象产品日益丰富多样,这为开展精细化的气象监测、气象预报预警等服务奠定了坚实的基础。
然而,由于不同的经营主体有不同的气象服务需求,甚至同一经营主体在不同时期的需求内容也不一样,因此气象服务产品需要在调研用户需求的基础上进行个性化定制。显然,面对众多用户的不同气象信息需求,如果采用人工录入和排版的方式进行服务产品制作,不但存在录入错误、校对时难以发现的问题,而且产品制作效率低下。可见,在开展个性化气象服务时,必须采用一种自动化技术,这种技术能对Word文档中诸如图、文、表的输入及其格式设置等操作进行自动处理,可快速、准确地生成气象服务产品。相关的技术有许多种:王怒涛等[1]在VC环境下实现了Word文档的自动生成;王锡良[2]利用Aspose.Words类库实现了Word文档生成、修改、转换和打印等功能;王春明等[3]在Java环境下利用Jacob组件实现了Word文档自动生成;林晋立[4]在VB环境中实现了检测报告的Word文档自动生成。在上述文献介绍的自动化技术中,除Aspose.Words类库属于API技术外,其余技术均与COM或OLE技术相关。鉴于Ms Office提供了OLE自动化技术,以VB为编程工具,采用OLE技术,通过对相关Word对象的访问,既能准确地录入数据,同时也能保持服务产品的标准化和规范化,使得服务效率和质量都有极大提高。
为了具体展示这些技术,假设向当地某一经济作物种植基地提供直通式气象服务,内容包括种植基地在过去24 h内气温变化情况、未来一周天气预报和农事活动气象适宜等级预报。
1 技术原理
1.1 OLE自动化
OLE自动化(即OLE Automation)是一个应用程序控制另一个应用程序的机制,通过在代码中定义不同类的对象来实现OLE功能[5]。在这样的机制下,控制其他对象的程序叫自动化客户端或主机程序,被控制的应用程序叫自动化服务器或目标程序。自动化服务器通过COM接口向自动化客户端公开其功能,这样自动化客户端就能直接访问自动化服务器上的对象并使用其提供的属性和方法来完成特定的功能。很多编程工具,如VB、Delphi、VC++、C++Builder、VS2013及宏语言都具有支持OLE技术的功能[6-10]。利用OLE技术,可以开发出集合多个专业平台功能于一体的综合应用软件。
1.2 Word对象模型
Word的自动化操作,实际就是对Word文档中窗口、图片、表格、区域、段落等内容进行一系列自动化处理,作为自动化服务器的Word将上述内容以各种对象的形式提供给自动化客户端。这些对象虽然数量众多,但均以层次结构的形式进行组织(见图1),这种具有组织体系的Word对象系统就是Word对象模型。通过Word对象模型,开发人员可以掌握各种Word对象及其属性、方法和事件,为实现Word的自动化控制奠定基础。
例如,Application对象在Word对象模型中居于层次结构的顶部,代表Word应用程序,所有与Word应用程序相关的操作均可通过这一对象来实现,一般通过Application对象来完成对Word应用环境的操作,如设置活动打印机名称、查询版本号等。Document对象对应Word文档,通过Document对象可实现对Word文档的新建、关闭、保存等操作。Range对象对应Word文档中的一个连续区域,可以对该区域进行复制、剪贴、导出、插入等操作。Bookmarks对象对应Word文档中的书签,常用于位置标记。上述的几个对象是常用的Word对象,在实现Word自动化过程中需要经常使用。
1.3 VB操作Word文档
在VB中,需要对Word对象库进行绑定后,才能对Word对象进行操作。绑定的方式有前期绑定和后期绑定。如果采用前期绑定,则须在VB工程中通过点击菜单“工程→引用”选取“Microsoft word XX.0 Object Library”实现。如果采用后期绑定的方式,则直接定义一个通用型对象变量,如dim WrdApp as Object,然后通过CreateObject方法或GetObject方法为WrdApp指向具体的对象。
前期绑定和后期绑定各有优势和劣势。一般而言,采用前期绑定的方式,可以提升应用程序的工作效率,同时在编写代码时可启用自动代码填充和动态帮助等实用功能,从而减轻编写代码的工作量,不过在程序运行时需要注意Word版本的兼容性限制;而采用后期绑定的方式,程序的兼容性更高,但内存消耗较大,同时由于编写代码时没有自动提示功能,所以要求程序员非常熟悉各类对象及其属性与方法。
2 农业气象服务产品自动制作的关键技术
农业气象服务产品自动生成的主要流程包括:根据用户需求定制个性化服务产品,设置文档模板及书签;根据文档模板新建文档;在书签处填写数据,删除书签;保存文档。在这过程中,文档模板及书签的设置非常重要,所有的自动化操作均建立在此基础上。
2.1 文档模板设置
在对气象服务产品进行个性化定制时,主要将用户需要的气象数据、文字报告、图表等内容以合理的方式进行版面组织,对预先输入或相对不变的文字、表格等内容进行设置,再确定好整体Word文档样式。所有这些工作均在文档模板设置时完成,并保存在指定的文件目录中。文档模板建立后,就能基于文档模板创建具有统一版面风格的文档,从而达到服务产品标准化和规范化的目的。
根据种植基地的气象服务需求,服务产品由24 h气温变化曲线图、未来一周天气预报和未来一周农事活动气象适宜等级预报3部分组成,对各部分的样式设置完成后保存为模板文件,文件命名为“直通式农业气象信息.dot”。
2.2 文档书签设置
在Word文档中,书签的主要作用是标记文档的特定位置,起到定位的作用。书签可以是文档中的任意部分[11],既可以是文档中的某一范围,也可以是一个插入点。利用书签的这一特性,可在Word模板文件设置时把需要填写数据的地方设置为书签,通过书签名称确定数据在文档中输入的位置。在本例中,建立3个书签,分别取名为sDate、Pic和Week,其中在书签sDate处填写服务产品的制作日期,在书签Pic处插入气温曲线图,在书签Week处填写未来一周天气预报。
2.3 文档创建
启动VB新建工程后,以前期绑定的方式引用Word对象库,定义Word的Application对象变量WrdApp、Document对象变量wrdDoc、Bookmarks对象变量wBkMark和Table对象变量wTb,其代码如下:
Dim WrdApp As Word.Application
Dim wrdDoc As Word.Document
Dim wBkMark As Word.Bookmark
Dim wTb As Word.Table,
下面代码展示了各对象变量指向的具体对象实例:
Set WrdApp = New Word.Application
Set wrdDoc = WrdApp.Documents.Add(Template:=App.Path amp; “\tmp\直通式农业气象信息。dot”)
Set wTb = wrdDoc.Tables(1)
其中,第二句代码表示以文件“直通式农业气象信息.dot”作为模板创建一个新的Word文档,这个Word文档继承了原模板文件包括页面、样式、书签等内容的所有信息,后续的程序将在此文档中进行数据填写、文档保存等操作。
2.4 数据填写
Word文档通常包括文字、图片、表格等数据,在本例中均有涉及。
2.4.1 文字填写
文字部分可先直接定位到书签,然后在该书签处进行填写。例如,假设变量sTxt(字符型变量)储存了未来一周天气预报,则以下代码即可在文档书签名为“week”的位置处填写未来一周天气预报:
Set wBkMark=wrdDoc.Bookmarks(“week”)
wBkMark.Range.Text = sTxt
2.4.2 图片插入
气温是影响作物生长的重要气象条件之一,通过气温实况数据,用户可以分析判断在过去一段时间内温度条件对作物生长的适宜程度。而能呈现种植基地在过去24 h内气温变化情况的最好方式就是气温变化曲线图。
向文档插入图片可以通过InlineShapes对象来实现,InlineShapes对象代表在文档、区域或所选内容中的所有内嵌形状的对象。在本例中,需要在书签名为“Pic”位置上插入一张气温变化曲线的图片,可用InlineShapes对象的AddPicture方法,其语法如下:
Expression.InlineShapes. AddPicture( FileName , LinkToFile , SaveWithDocument , Range )
其中,字符型参数变量FileName是必需的参数,其指出了需要插入图片的路径和文件名;参数LinkToFile表示是否将图片链接到创建它的文档;参数SaveWithDocument表示是否将链接的图片与文档一起保存;参数Range 表示图片放置在文本中的位置。后3个参数变量可省略。假设sPath储存了基地过去24 h气温变化曲线图的路径和文件名,则以下代码可实现在书签名为“Pic”位置处插入24 h气温变化曲线图:
Set wBkMark=wrdDoc.Bookmarks(“Pic”)
wBkMark.Range.InlineShapes.AddPicture FileName:=sPath
2.4.3 表格填写
未来一周农事活动气象适宜等级预报涉及7 d的等级预报,在文档中设计为表格使得文档页面简洁,内容一目了然。在本例中,先在模板文件中设计好一张空表格。假设气象适宜等级预报内容储存在字符型数组sTxt(n)中,其中数组元素按“日期、等级预报”的顺序依次排列,如“sTxt(1)、sTxt(2)、sTxt(3)、sTxt(4)、……sTxt(13)、sTxt(14)”分别是“11月8日、适宜、11月9日、适宜、……、11月14日、不适宜”。通过以下代码可以完成表格填写:
n = 1
For i = 2 To iRow
For k = 1 To 2
wTb.Cell(i, k).Range.Text = sTxt(n)
n = n + 1
Next k
Next i
其中,iRow是表格的总行数;Cell(i,k)为表格中第i行、第k列处的单元格对象。由于表格第一行是表头,因此,表格的填写从第二行开始,通过两个For循环逐行逐列地填写。
2.5 书签删除及文档保存
填写完所有数据后,需要删除书签,以便文档页面保持简洁,在程序中通过遍历所有书签变量的方式进行删除,其代码如下:
For Each wBkMark In wrdDoc.Bookmarks
wBkMark.Delete
Next wBkMark
将文档保存在指定的文件夹中,在本例中,字符型变量sDocPath储存了文档应存放的文件夹和文件名,则以下代码可实现文档保存:
wrdDoc.SaveAs sDocPath
2.6 关闭文档与Word程序
程序结束前,通过wrdDoc.Close和WrdApp.Quit两句代码关闭文档和Word程序。最后将所有对象变量赋值为Nothing,释放对象变量所占用的内存空间。例如,释放书签对象变量wBkMark,其代码为:Set wBkMark = Nothing。
3 结束语
此研究简要阐述了Word文档自动化制作的技术原理,并以具体的气象服务产品制作为例,按业务流程介绍了文档模板和书签设计的思路,最后利用VB编程工具,对文档创建、保存及在文档中文字填写、图片插入、表格数据录入等操作给出了具体的代码。程序运行结果表明,该技术能快速、高效、准确地生成规范化、标准化的农业气象服务产品,有利于提高气象服务的效率和质量。
参考文献:
[1]王怒涛,李大凯,李丹,等.VC++的Word文档中的表与图自动生成技术[J].石油工业计算机应用,2015,86(2):20-23.
[2]王锡良.公共气象服务文档自动化研究与应用[J].中低纬山地气象,2018,42(3):95-98.
[3]王春明,朱晓辉,陆天捷.基于JACOB的Word文档自动生成技术研究[J].南通职业大学学报,2012,26(1):77-80.
[4]林晋立.基于VB6.0的检测报告生成系统的设计与实现[J].现代计算机,2022,28(21):82-86.
[5]王惠平.浅谈Visual Basic 6.0中OLE自动化的应用[J].韶关学院学报(自然科学),2005,26(9):17-21.
[6]吕静.基于OLE自动化实现Excel动态报表[J].电脑知识与技术,2017,13(9):180-181.
[7]邵淑霞.OLE自动化技术[J].无线互联科技,2013(2):182.
[8]郭玉乐,刘丕亮.利用C++Builder实现Excel数据及图表生成[J].数码世界,2017(5):20.
[9]关旭东.基于VS2013的检波器测试仪测试报表自动生成技术[J].林业科技情报,2016,48(4):80-85.
[10]王炎舜.对象链接与嵌入技术在产品测试输出中的应用[J].河南科技,2020(8):31-33.
[11]宋翔.Word排版技术大全[M].北京:人民邮电出版社,2015:295.
作者简介:于成(1975—),男,硕士,工程师,研究方向:农业气象、气候资源、决策气象研究与服务及程序设计。