摘 要:隨著現(xiàn)代農(nóng)業(yè)的發(fā)展,各種新型農(nóng)業(yè)生產(chǎn)經(jīng)營主體對精細化氣象服務(wù)的需求越來越迫切。因此,需要一種快速、準確的氣象服務(wù)產(chǎn)品制作技術(shù),以提高農(nóng)業(yè)氣象服務(wù)的效率和品質(zhì)。利用OLE自動化技術(shù)和Word對象模型,可實現(xiàn)VB對Word文檔的自動化操作。此研究以直通式農(nóng)業(yè)氣象服務(wù)產(chǎn)品制作為例,詳細地介紹了Word自動化技術(shù)在農(nóng)業(yè)氣象服務(wù)中的具體應(yīng)用。
關(guān)鍵詞:OLE自動化;Word對象模型;VB編程;農(nóng)業(yè)氣象服務(wù)
中國分類號:TP317.1;S126 文獻標志碼:A 文章編號:1674-7909(2024)7-136-4
DOI:10.19345/j.cnki.1674-7909.2024.07.031
0 引言
眾所周知,農(nóng)業(yè)對天氣、氣候影響的反應(yīng)最敏感,也因此而具有脆弱性。農(nóng)業(yè)生產(chǎn)者不僅要考慮氣候資源對作物生長適宜性的滿足程度,也要考慮各種氣象災(zāi)害對作物生長和農(nóng)事活動的限制,由此做出最佳的農(nóng)業(yè)布局和生產(chǎn)計劃安排,以獲得最高的農(nóng)業(yè)生產(chǎn)收益。因此,現(xiàn)代農(nóng)業(yè)中諸如農(nóng)村合作社、農(nóng)業(yè)基地、農(nóng)業(yè)產(chǎn)業(yè)化龍頭企業(yè)及專業(yè)種植戶等新型農(nóng)業(yè)生產(chǎn)經(jīng)營主體對氣象的精細化服務(wù)有著迫切的需要。與此同時,隨著氣象現(xiàn)代化建設(shè)的不斷推進,綜合氣象觀測能力和氣象預(yù)報預(yù)測能力也不斷提高。諸如衛(wèi)星資料、雷達數(shù)據(jù)、地面氣象觀測數(shù)據(jù)、氣象融合數(shù)據(jù)、智能網(wǎng)格氣象預(yù)報數(shù)據(jù)等氣象產(chǎn)品日益豐富多樣,這為開展精細化的氣象監(jiān)測、氣象預(yù)報預(yù)警等服務(wù)奠定了堅實的基礎(chǔ)。
然而,由于不同的經(jīng)營主體有不同的氣象服務(wù)需求,甚至同一經(jīng)營主體在不同時期的需求內(nèi)容也不一樣,因此氣象服務(wù)產(chǎn)品需要在調(diào)研用戶需求的基礎(chǔ)上進行個性化定制。顯然,面對眾多用戶的不同氣象信息需求,如果采用人工錄入和排版的方式進行服務(wù)產(chǎn)品制作,不但存在錄入錯誤、校對時難以發(fā)現(xiàn)的問題,而且產(chǎn)品制作效率低下。可見,在開展個性化氣象服務(wù)時,必須采用一種自動化技術(shù),這種技術(shù)能對Word文檔中諸如圖、文、表的輸入及其格式設(shè)置等操作進行自動處理,可快速、準確地生成氣象服務(wù)產(chǎn)品。相關(guān)的技術(shù)有許多種:王怒濤等[1]在VC環(huán)境下實現(xiàn)了Word文檔的自動生成;王錫良[2]利用Aspose.Words類庫實現(xiàn)了Word文檔生成、修改、轉(zhuǎn)換和打印等功能;王春明等[3]在Java環(huán)境下利用Jacob組件實現(xiàn)了Word文檔自動生成;林晉立[4]在VB環(huán)境中實現(xiàn)了檢測報告的Word文檔自動生成。在上述文獻介紹的自動化技術(shù)中,除Aspose.Words類庫屬于API技術(shù)外,其余技術(shù)均與COM或OLE技術(shù)相關(guān)。鑒于Ms Office提供了OLE自動化技術(shù),以VB為編程工具,采用OLE技術(shù),通過對相關(guān)Word對象的訪問,既能準確地錄入數(shù)據(jù),同時也能保持服務(wù)產(chǎn)品的標準化和規(guī)范化,使得服務(wù)效率和質(zhì)量都有極大提高。
為了具體展示這些技術(shù),假設(shè)向當(dāng)?shù)啬骋唤?jīng)濟作物種植基地提供直通式氣象服務(wù),內(nèi)容包括種植基地在過去24 h內(nèi)氣溫變化情況、未來一周天氣預(yù)報和農(nóng)事活動氣象適宜等級預(yù)報。
1 技術(shù)原理
1.1 OLE自動化
OLE自動化(即OLE Automation)是一個應(yīng)用程序控制另一個應(yīng)用程序的機制,通過在代碼中定義不同類的對象來實現(xiàn)OLE功能[5]。在這樣的機制下,控制其他對象的程序叫自動化客戶端或主機程序,被控制的應(yīng)用程序叫自動化服務(wù)器或目標程序。自動化服務(wù)器通過COM接口向自動化客戶端公開其功能,這樣自動化客戶端就能直接訪問自動化服務(wù)器上的對象并使用其提供的屬性和方法來完成特定的功能。很多編程工具,如VB、Delphi、VC++、C++Builder、VS2013及宏語言都具有支持OLE技術(shù)的功能[6-10]。利用OLE技術(shù),可以開發(fā)出集合多個專業(yè)平臺功能于一體的綜合應(yīng)用軟件。
1.2 Word對象模型
Word的自動化操作,實際就是對Word文檔中窗口、圖片、表格、區(qū)域、段落等內(nèi)容進行一系列自動化處理,作為自動化服務(wù)器的Word將上述內(nèi)容以各種對象的形式提供給自動化客戶端。這些對象雖然數(shù)量眾多,但均以層次結(jié)構(gòu)的形式進行組織(見圖1),這種具有組織體系的Word對象系統(tǒng)就是Word對象模型。通過Word對象模型,開發(fā)人員可以掌握各種Word對象及其屬性、方法和事件,為實現(xiàn)Word的自動化控制奠定基礎(chǔ)。
例如,Application對象在Word對象模型中居于層次結(jié)構(gòu)的頂部,代表Word應(yīng)用程序,所有與Word應(yīng)用程序相關(guān)的操作均可通過這一對象來實現(xiàn),一般通過Application對象來完成對Word應(yīng)用環(huán)境的操作,如設(shè)置活動打印機名稱、查詢版本號等。Document對象對應(yīng)Word文檔,通過Document對象可實現(xiàn)對Word文檔的新建、關(guān)閉、保存等操作。Range對象對應(yīng)Word文檔中的一個連續(xù)區(qū)域,可以對該區(qū)域進行復(fù)制、剪貼、導(dǎo)出、插入等操作。Bookmarks對象對應(yīng)Word文檔中的書簽,常用于位置標記。上述的幾個對象是常用的Word對象,在實現(xiàn)Word自動化過程中需要經(jīng)常使用。
1.3 VB操作Word文檔
在VB中,需要對Word對象庫進行綁定后,才能對Word對象進行操作。綁定的方式有前期綁定和后期綁定。如果采用前期綁定,則須在VB工程中通過點擊菜單“工程→引用”選取“Microsoft word XX.0 Object Library”實現(xiàn)。如果采用后期綁定的方式,則直接定義一個通用型對象變量,如dim WrdApp as Object,然后通過CreateObject方法或GetObject方法為WrdApp指向具體的對象。
前期綁定和后期綁定各有優(yōu)勢和劣勢。一般而言,采用前期綁定的方式,可以提升應(yīng)用程序的工作效率,同時在編寫代碼時可啟用自動代碼填充和動態(tài)幫助等實用功能,從而減輕編寫代碼的工作量,不過在程序運行時需要注意Word版本的兼容性限制;而采用后期綁定的方式,程序的兼容性更高,但內(nèi)存消耗較大,同時由于編寫代碼時沒有自動提示功能,所以要求程序員非常熟悉各類對象及其屬性與方法。
2 農(nóng)業(yè)氣象服務(wù)產(chǎn)品自動制作的關(guān)鍵技術(shù)
農(nóng)業(yè)氣象服務(wù)產(chǎn)品自動生成的主要流程包括:根據(jù)用戶需求定制個性化服務(wù)產(chǎn)品,設(shè)置文檔模板及書簽;根據(jù)文檔模板新建文檔;在書簽處填寫數(shù)據(jù),刪除書簽;保存文檔。在這過程中,文檔模板及書簽的設(shè)置非常重要,所有的自動化操作均建立在此基礎(chǔ)上。
2.1 文檔模板設(shè)置
在對氣象服務(wù)產(chǎn)品進行個性化定制時,主要將用戶需要的氣象數(shù)據(jù)、文字報告、圖表等內(nèi)容以合理的方式進行版面組織,對預(yù)先輸入或相對不變的文字、表格等內(nèi)容進行設(shè)置,再確定好整體Word文檔樣式。所有這些工作均在文檔模板設(shè)置時完成,并保存在指定的文件目錄中。文檔模板建立后,就能基于文檔模板創(chuàng)建具有統(tǒng)一版面風(fēng)格的文檔,從而達到服務(wù)產(chǎn)品標準化和規(guī)范化的目的。
根據(jù)種植基地的氣象服務(wù)需求,服務(wù)產(chǎn)品由24 h氣溫變化曲線圖、未來一周天氣預(yù)報和未來一周農(nóng)事活動氣象適宜等級預(yù)報3部分組成,對各部分的樣式設(shè)置完成后保存為模板文件,文件命名為“直通式農(nóng)業(yè)氣象信息.dot”。
2.2 文檔書簽設(shè)置
在Word文檔中,書簽的主要作用是標記文檔的特定位置,起到定位的作用。書簽可以是文檔中的任意部分[11],既可以是文檔中的某一范圍,也可以是一個插入點。利用書簽的這一特性,可在Word模板文件設(shè)置時把需要填寫數(shù)據(jù)的地方設(shè)置為書簽,通過書簽名稱確定數(shù)據(jù)在文檔中輸入的位置。在本例中,建立3個書簽,分別取名為sDate、Pic和Week,其中在書簽sDate處填寫服務(wù)產(chǎn)品的制作日期,在書簽Pic處插入氣溫曲線圖,在書簽Week處填寫未來一周天氣預(yù)報。
2.3 文檔創(chuàng)建
啟動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\直通式農(nóng)業(yè)氣象信息。dot”)
Set wTb = wrdDoc.Tables(1)
其中,第二句代碼表示以文件“直通式農(nóng)業(yè)氣象信息.dot”作為模板創(chuàng)建一個新的Word文檔,這個Word文檔繼承了原模板文件包括頁面、樣式、書簽等內(nèi)容的所有信息,后續(xù)的程序?qū)⒃诖宋臋n中進行數(shù)據(jù)填寫、文檔保存等操作。
2.4 數(shù)據(jù)填寫
Word文檔通常包括文字、圖片、表格等數(shù)據(jù),在本例中均有涉及。
2.4.1 文字填寫
文字部分可先直接定位到書簽,然后在該書簽處進行填寫。例如,假設(shè)變量sTxt(字符型變量)儲存了未來一周天氣預(yù)報,則以下代碼即可在文檔書簽名為“week”的位置處填寫未來一周天氣預(yù)報:
Set wBkMark=wrdDoc.Bookmarks(“week”)
wBkMark.Range.Text = sTxt
2.4.2 圖片插入
氣溫是影響作物生長的重要氣象條件之一,通過氣溫實況數(shù)據(jù),用戶可以分析判斷在過去一段時間內(nèi)溫度條件對作物生長的適宜程度。而能呈現(xiàn)種植基地在過去24 h內(nèi)氣溫變化情況的最好方式就是氣溫變化曲線圖。
向文檔插入圖片可以通過InlineShapes對象來實現(xiàn),InlineShapes對象代表在文檔、區(qū)域或所選內(nèi)容中的所有內(nèi)嵌形狀的對象。在本例中,需要在書簽名為“Pic”位置上插入一張氣溫變化曲線的圖片,可用InlineShapes對象的AddPicture方法,其語法如下:
Expression.InlineShapes. AddPicture( FileName , LinkToFile , SaveWithDocument , Range )
其中,字符型參數(shù)變量FileName是必需的參數(shù),其指出了需要插入圖片的路徑和文件名;參數(shù)LinkToFile表示是否將圖片鏈接到創(chuàng)建它的文檔;參數(shù)SaveWithDocument表示是否將鏈接的圖片與文檔一起保存;參數(shù)Range 表示圖片放置在文本中的位置。后3個參數(shù)變量可省略。假設(shè)sPath儲存了基地過去24 h氣溫變化曲線圖的路徑和文件名,則以下代碼可實現(xiàn)在書簽名為“Pic”位置處插入24 h氣溫變化曲線圖:
Set wBkMark=wrdDoc.Bookmarks(“Pic”)
wBkMark.Range.InlineShapes.AddPicture FileName:=sPath
2.4.3 表格填寫
未來一周農(nóng)事活動氣象適宜等級預(yù)報涉及7 d的等級預(yù)報,在文檔中設(shè)計為表格使得文檔頁面簡潔,內(nèi)容一目了然。在本例中,先在模板文件中設(shè)計好一張空表格。假設(shè)氣象適宜等級預(yù)報內(nèi)容儲存在字符型數(shù)組sTxt(n)中,其中數(shù)組元素按“日期、等級預(yù)報”的順序依次排列,如“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是表格的總行數(shù);Cell(i,k)為表格中第i行、第k列處的單元格對象。由于表格第一行是表頭,因此,表格的填寫從第二行開始,通過兩個For循環(huán)逐行逐列地填寫。
2.5 書簽刪除及文檔保存
填寫完所有數(shù)據(jù)后,需要刪除書簽,以便文檔頁面保持簡潔,在程序中通過遍歷所有書簽變量的方式進行刪除,其代碼如下:
For Each wBkMark In wrdDoc.Bookmarks
wBkMark.Delete
Next wBkMark
將文檔保存在指定的文件夾中,在本例中,字符型變量sDocPath儲存了文檔應(yīng)存放的文件夾和文件名,則以下代碼可實現(xiàn)文檔保存:
wrdDoc.SaveAs sDocPath
2.6 關(guān)閉文檔與Word程序
程序結(jié)束前,通過wrdDoc.Close和WrdApp.Quit兩句代碼關(guān)閉文檔和Word程序。最后將所有對象變量賦值為Nothing,釋放對象變量所占用的內(nèi)存空間。例如,釋放書簽對象變量wBkMark,其代碼為:Set wBkMark = Nothing。
3 結(jié)束語
此研究簡要闡述了Word文檔自動化制作的技術(shù)原理,并以具體的氣象服務(wù)產(chǎn)品制作為例,按業(yè)務(wù)流程介紹了文檔模板和書簽設(shè)計的思路,最后利用VB編程工具,對文檔創(chuàng)建、保存及在文檔中文字填寫、圖片插入、表格數(shù)據(jù)錄入等操作給出了具體的代碼。程序運行結(jié)果表明,該技術(shù)能快速、高效、準確地生成規(guī)范化、標準化的農(nóng)業(yè)氣象服務(wù)產(chǎn)品,有利于提高氣象服務(wù)的效率和質(zhì)量。
參考文獻:
[1]王怒濤,李大凱,李丹,等.VC++的Word文檔中的表與圖自動生成技術(shù)[J].石油工業(yè)計算機應(yīng)用,2015,86(2):20-23.
[2]王錫良.公共氣象服務(wù)文檔自動化研究與應(yīng)用[J].中低緯山地氣象,2018,42(3):95-98.
[3]王春明,朱曉輝,陸天捷.基于JACOB的Word文檔自動生成技術(shù)研究[J].南通職業(yè)大學(xué)學(xué)報,2012,26(1):77-80.
[4]林晉立.基于VB6.0的檢測報告生成系統(tǒng)的設(shè)計與實現(xiàn)[J].現(xiàn)代計算機,2022,28(21):82-86.
[5]王惠平.淺談Visual Basic 6.0中OLE自動化的應(yīng)用[J].韶關(guān)學(xué)院學(xué)報(自然科學(xué)),2005,26(9):17-21.
[6]呂靜.基于OLE自動化實現(xiàn)Excel動態(tài)報表[J].電腦知識與技術(shù),2017,13(9):180-181.
[7]邵淑霞.OLE自動化技術(shù)[J].無線互聯(lián)科技,2013(2):182.
[8]郭玉樂,劉丕亮.利用C++Builder實現(xiàn)Excel數(shù)據(jù)及圖表生成[J].數(shù)碼世界,2017(5):20.
[9]關(guān)旭東.基于VS2013的檢波器測試儀測試報表自動生成技術(shù)[J].林業(yè)科技情報,2016,48(4):80-85.
[10]王炎舜.對象鏈接與嵌入技術(shù)在產(chǎn)品測試輸出中的應(yīng)用[J].河南科技,2020(8):31-33.
[11]宋翔.Word排版技術(shù)大全[M].北京:人民郵電出版社,2015:295.
作者簡介:于成(1975—),男,碩士,工程師,研究方向:農(nóng)業(yè)氣象、氣候資源、決策氣象研究與服務(wù)及程序設(shè)計。