王錫良
(四川省阿壩州氣象局,四川 馬爾康 624000)
氣象服務,是指氣象部門基于大氣科學的理論與技術,根據社會、經濟、軍事、生態、防災減災等的需要,向社會提供的各類工作[1]。是我國氣象事業的立業之本[2-5]。目前,我國的氣象服務體系由決策氣象服務、公眾氣象服務、專業專項氣象服務和氣象科技服務構成[6-7]。公共氣象服務是氣象業務產品向社會提供服務的出口,是氣象工作的出發點和歸宿[8-9]。氣象部門通過電視、廣播、傳真、手機短信、手機APP、電子郵件、微信、微博等各種方式[10-13],向社會公眾發布氣象信息。可見,公共氣象服務工作需要根據不同用戶的各種需求,有針對性地提供各種氣象服務產品。為用戶提供Word、Excel等Microsoft Office軟件格式的文檔,則是最為常用的服務產品提供方式。為了提高工作效率,減輕工作人員的勞動強度,利用軟件開發技術和Office軟件相結合,實現氣象服務文檔的自動化生成,是公共氣象服務工作中的迫切需求。
實現Microsoft Office文檔自動化的技術通常有兩種,一是利用VBA(Visual Basic for Application)[14-15]來實現。VBA是微軟公司開發的能執行自動化任務的編程語言,主要用于擴展Windows應用程序的功能,特別是對于Microsoft Office軟件,VBA提供了訪問Office文檔的接口,包含了大量針對該類文檔的對象和函數。使用VBA編程可以對文檔中各對象的屬性進行操作,以實現Office文檔操作的自動化。二是通過COM(Component Object Model,組件對象模型)[16-20]技術以接口調用的方式操控Office組件來生成文檔。COM是Microsoft公司提出的在軟件之間通信的一種組件技術,其目的是為了提高軟件的可復用度,解決不同程序之間的通信和互操作性問題。Microsoft Office對COM技術有著很好的支持,其本身就是COM服務器,通過它的自動化服務器功能,可以在不同的應用程序間共享數據,進行數據的導入導出。這兩種技術的優點如下:都是Microsoft公司的技術,能和Microsoft Office軟件緊密結合,實現文檔的自動化。缺點是:它們都離不開Microsoft Office環境,在工作的機器上必須安裝Microsoft Office軟件才能運行。針對某個特定版本的Office軟件開發的應用程序,在其它版本的Office環境中運行,還可能出現錯誤而無法運行的情況。
Aspose.Words for .NET和Aspose.Cells for .NET是功能強大的類庫。Aspose.Words支持DOC、OpenDocument、OOXML、HTML、RTF、PDF等格式,通過它可以直接在應用程序中執行各種文檔處理任務。Aspose.Cells是電子表格組件,支持對Excel格式的文檔應用復雜的計算公式,導入和導出文本、表格、圖像等數據。而完成這些功能都無需使用Microsoft Word、Excel 和Microsoft Office Automation。采用.NET編程語言和Aspose.Words for .NET、Aspose.Cells for .NET類庫相結合,即使在沒有安裝Microsoft Office軟件的環境中,也能生成Word和Excel文檔,并能進行修改、轉換和打印等操作,也無需考慮Office軟件的版本問題,可靈活實現常用辦公文檔的自動化。
Word和Excel格式的文檔是日常工作中使用最為普遍的兩種Office辦公軟件文檔。在公共氣象服務工作中,服務產品通常以這兩種格式的文檔提供給服務對象。一種典型應用是,把動態的數據自動寫入Word模板中的特定位置,以生成服務產品的Word文檔;另外一種是,從Excel文檔中自動提取出需要的數據,然后寫入Word模板中,來生成Word文檔。以下,通過使用C#語言,結合Aspose.Words for .NET、Aspose.Cells for .NET來實現這兩種應用。
以Word格式提供的公共氣象服務文檔,通常都具有一定的格式。不同時間發布的的文檔,只是某些數據不同而已。比如,日期、氣溫、降水量、天氣現象等。而這些數據在文檔中的位置不會變化。事先制作好具有固定格式的Word文檔,在文檔中需要插入數據的地方預留特定的“標識”,然后通過C#控制Aspose.Words for .NET在“標識”處寫入需要的數據,即能快速生成服務文檔。在“標識”處寫入數據有兩種方式,一種是文本替換的方式,即用需要的數據替換掉文檔中原來位置的文本;另外一種是書簽引用替換的方式,在需要插入數據的地方插入書簽引用,在程序運行時,用數據替換掉對應的書簽即可。這里用第二種方式來說明。
以生成提供給阿壩州電力公司的“阿壩州各縣(市)48 h預報”服務文檔為例。先建立Word文檔,在文檔中輸入文字、建立表格,并設置好格式。在需要插入數據的地方,插入相應的書簽引用。如圖1所示。

圖1 Word模板文檔Fig.1 Word template document
建立一個工程項目,在工程中添加對Aspose.Words.dll文件的引用,并在代碼中引入命名空間:
using Aspose.Words;
在準備好需要寫入文檔的數據以后,通過程序控制Aspose.Words寫入模板中的相應的位置處。主要代碼如下:
string strDocPath = System.AppDomain.CurrentDomain.BaseDirectory + @" template電力公司48小時預報.docx";
Aspose.Words.Document doc = new Aspose.Words.Document(strDocPath);//載入Word模板
Aspose.Words.Bookmark bookmark = doc.Range.Bookmarks["datetime_header"];
if (bookmark != null)
{
bookmark.Text = strDatetime_header;//給當前書簽的文本賦值
}
……(此處略去其它功能相似代碼)
string strDocOutFile =System.AppDomain.CurrentDomain.BaseDirectory + @" outFile電力公司48小時預報_" + strYMD + ".docx";//輸出的word文件
doc.Save(strDocOutFile);//保存文檔
生成的文檔如圖2所示。

圖2 基于模板生成的Word文檔Fig.2 Word document based on template generation
在日常工作中,有些保存在Excel中的數據經過處理后,需要寫入Word文檔,然后提供給客戶。如果數據較多,通過手工的方式來處理,將是非常大的工作量。通過Aspose.Words for .NET和Aspose.Cells for .NET相配合,從Excel文檔中提取需要的數據,然后寫入Word模板中的相應位置,生成Word服務文檔,將變得非常快捷。
以生成阿壩州岷江流域和大渡河流域雨情報告為例。阿壩州氣象局在全州范圍內建設了300多個自動氣象站,這些自動氣象站在某一時段內的降水量數據是以Excel文檔提供的。如圖3所示。

圖3 自動氣象站降水數據Fig.3 Automatic weather station precipitation data
首先,新建Word模板,方法同上。然后,新建一項目工程,在工程中添加對Aspose.Cells.dll、Aspose.Words.dll文件的引用,在C#代碼中引入命名空間:
using Aspose.Words;
using Aspose.Cells;
通過Aspose.Cells for .NET從Excel文件中獲取數據,然后寫入Word模板生成服務文檔的關鍵代碼如下:
//創建一個工作簿Workbook對象和工作表Worksheet對象
Workbook wkBook = new Workbook(rainFile, txtLoadOpt);
Worksheet wkSheet = null;
wkBook.FileFormat = FileFormatType.Xlsx;
wkSheet = wkBook.Worksheets[0];
Cells cells = wkSheet.Cells;//獲取sheet0的所有單元格
for (int i = 0; i < cells.MaxDataRow + 1; i++)
{
strCurStation = cells[i, intColumn_station].StringValue.Trim();//站點名
strCurRain = cells[i, intColumn_rain].StringValue.Trim());//站點對應的降水量
if (strCurStation.Equals("映秀鎮七一中學"))
{
bookmark = doc.Range.Bookmarks["映秀鎮"];
//給Word模板中當前書簽的文本賦值
SetBookmarkValue(bookmark, strCurRain );
}
……(此處略去其它功能相似代碼)
}
//釋放對象
wkSheet = null;
wkBook = null;
生成的Word文檔如圖4所示。

圖4 基于模板和Excel文檔生成的Word文檔Fig.4 Word document generated based on templates and Excel document
在日常工作中,Word和Excel格式的文檔應用非常普遍。通過.NET編程語言和Aspose.Words for .NET、Aspose.Cells for .NET相配合,能非常快捷地解決實際應用。其最大的靈活性在于,在工作環境中不依賴于Microsoft Office軟件,就能生成Word和Excel文檔。Aspose.Words for .NET還能實現對PDF、OpenDocument、HTML等格式的支持和轉換;Aspose.Cells for .NET支持所有Excel格式類型的操作,能將Excel的數據保存為各種格式、實現數據報表等。根據公共氣象服務工作中的業務需求,把這些功能靈活地應用到文檔自動化技術中,將極大地提高工作效率。