馮 峰 丁韶輝
(淮河水利委員會水文局(信息中心) 蚌埠 233001)
2014年8 月,南四湖地區(qū)出現(xiàn)嚴重旱情,正式啟用南水北調(diào)東線一期工程向南四湖生態(tài)應(yīng)急調(diào)水,此后,通過南水北調(diào)東線向山東調(diào)水進入常態(tài)化。為了做好水資源配置與調(diào)度管理工作,自2014年起,水利部逐年下達了南水北調(diào)東線一期工程年度水量調(diào)度計劃,并由南水北調(diào)東線總公司負責(zé)實施。按照工作安排,淮委水文局在南水北調(diào)省際泵站進行調(diào)水量監(jiān)測,并將每日調(diào)水量向上級部門報送。
在東線一期工程調(diào)水信息報送工作中,需要每日從數(shù)據(jù)庫查詢調(diào)水監(jiān)測數(shù)據(jù)、計算調(diào)水量、編輯簡報、發(fā)送郵件和短信。首先從實時水情數(shù)據(jù)庫系統(tǒng)(Microsoft SQL Server)查詢各測站的測流時間、流量、水位等數(shù)據(jù),然后將數(shù)據(jù)輸入有確定公式和格式的Excel 表格進行累計調(diào)水量計算,下一步結(jié)合計算結(jié)果編寫具有固定簡報格式的Word 文檔,形成簡報,然后將簡報作為附件群發(fā)郵件至各相關(guān)部門人員,另外通過短信群發(fā)平臺群發(fā)調(diào)水簡訊。簡報及短信發(fā)送工作重復(fù)性較強,很大程度上可以利用軟件來實現(xiàn)。
本文采用C#面向?qū)ο笳Z言設(shè)計軟件界面,結(jié)合SQL Server 數(shù)據(jù)庫查詢、Word 和Excel 文檔處理、郵件、網(wǎng)頁等相關(guān)類庫和控件進行程序編寫,實現(xiàn)簡報及短信發(fā)送的自動化,極大地提高了工作效率。
C#是微軟公司發(fā)布的一種面向?qū)ο蟮摹⑦\行于.NET Framework 之上的高級程序設(shè)計語言,具有安全、穩(wěn)定、使用簡單等特點。C#由C和C++衍生而來,繼承了C 和C++強大功能,同時去掉了一些復(fù)雜特性。C#綜合了VB 簡單的可視化操作和C++的高運行效率,以其強大的操作能力、優(yōu)雅的語法風(fēng)格、創(chuàng)新的語言特性和便捷的面向組件編程的支持成為.NET開發(fā)的首選語言。
.NET Framework 類庫是一個由類、接口和值類型組成的庫,通過該庫中的內(nèi)容可訪問系統(tǒng)功能,它是生成.NET Framework 應(yīng)用程序、組件和控件的基礎(chǔ),使用者可以根據(jù)需要使用恰當(dāng)?shù)拿臻g中的類進行編程,提高編程效率。
軟件主要包含四個模塊,即數(shù)據(jù)庫操作模塊、文檔處理模塊、郵件發(fā)送模塊和短信發(fā)送模塊。
軟件的設(shè)計思路:首先,利用數(shù)據(jù)庫操作模塊,提取數(shù)據(jù)庫中近兩天的水位、流量等數(shù)據(jù),判斷當(dāng)天監(jiān)測數(shù)據(jù)是否收到,如果收到,將最新的數(shù)據(jù)按照一定的表結(jié)構(gòu)轉(zhuǎn)存到本地數(shù)據(jù)庫;然后取出本地數(shù)據(jù),利用文檔處理模塊將取出的數(shù)據(jù)填入Excel表并自動計算,根據(jù)計算結(jié)果自動生成Word 簡報文檔;最后通過郵件發(fā)送模塊和短信發(fā)送模塊進行郵件和短信的發(fā)送。
調(diào)水期間,測流人員對各泵站的調(diào)水流量進行監(jiān)測,隨后將監(jiān)測情況上報并最終傳輸至雨水情數(shù)據(jù)庫。但由于網(wǎng)絡(luò)故障等原因,有時會出現(xiàn)漏報或數(shù)據(jù)上傳故障,實時雨水情庫不能隨意改動,所以需要另外建立數(shù)據(jù)庫,專門存放各泵站的流量監(jiān)測數(shù)據(jù)。
提取與轉(zhuǎn)存數(shù)據(jù)庫中的數(shù)據(jù),主要使用了SqlDataAdapter、SqlBulkCopy 等類。其中,SqlData-Adapter 類利用數(shù)據(jù)庫連接和查詢命令從SQL Server數(shù)據(jù)庫獲取調(diào)水流量監(jiān)測數(shù)據(jù),存入DataSet;SqlBulkCopy 類用于將從水情實時數(shù)據(jù)庫中取得的數(shù)據(jù)批量加載到本地SQL Server 數(shù)據(jù)庫。
近兩年,南水北調(diào)東線調(diào)水量均是利用Excel表格進行計算,為了工作上的延續(xù)性及便捷性,本軟件也利用Excel 表格計算。首先將數(shù)據(jù)庫中的調(diào)水監(jiān)測數(shù)據(jù)導(dǎo)入Excel 表格,結(jié)合Excel 自身的計算功能,算出調(diào)水量,然后根據(jù)計算結(jié)果,結(jié)合簡報格式,生成Word 簡報文檔。該模塊主要使用Microsoft.Office.Interop.Excel 和Microsoft.Office.Interop.Word 命名空間中的類。
東線調(diào)水簡報每日通過郵件發(fā)送到各相關(guān)部門工作人員,本軟件可以利用郵件發(fā)送模塊實現(xiàn)該功能。郵件發(fā)送模塊主要使用MailMessage 和SmtpClient 類,利用SMTP 簡單郵件傳輸協(xié)議完成信件發(fā)送。程序中添加發(fā)件人賬戶、密碼及收件人賬戶,在運行軟件時,首先選擇要發(fā)送的簡報作為附件,點擊發(fā)送即可完成群發(fā)。編寫程序時需添加命名空間System.Net.Mail。
調(diào)水期間,除發(fā)送簡報郵件外,還需把各泵站調(diào)水量通過短信平臺以短信的形式發(fā)送到相關(guān)部門工作人員,本軟件利用短信發(fā)送模塊的WebBrowser控件實現(xiàn)該功能。WebBrowser 控件可以在Windows窗體應(yīng)用程序中承載網(wǎng)頁,利用成員函數(shù)將控件導(dǎo)航到指定的短信平臺網(wǎng)址,自動完成賬號和密碼的填入、登錄;然后跳轉(zhuǎn)到發(fā)送頁面,自動獲取Excel 表格中的計算結(jié)果數(shù)據(jù)作為發(fā)送內(nèi)容,將其與接收方的手機號碼填入網(wǎng)頁,用戶只需確認無誤后點擊發(fā)送即可。
將該軟件應(yīng)用到南水北調(diào)東線2017—2018年度調(diào)水的簡報發(fā)送工作中,軟件能夠完成監(jiān)測數(shù)據(jù)的提取、結(jié)合Excel 表計算調(diào)水量、自動生成調(diào)水簡報Word 文檔、發(fā)送簡報與短信等工作,軟件使用簡單,發(fā)簡報所用時間由原來的25 分鐘左右縮減到2~3 分鐘,大大提高了工作效率。
(1)本文介紹了C#結(jié)合SQL Server 數(shù)據(jù)庫、Office 文檔的開發(fā)方式,分析了軟件制作、發(fā)送簡報的思路,構(gòu)建了軟件架構(gòu),討論了軟件代碼細節(jié),實現(xiàn)了軟件制作與發(fā)送簡報的功能。
(2)調(diào)水簡報發(fā)送軟件界面簡潔,操作簡便,應(yīng)用于南水北調(diào)東線調(diào)水簡報發(fā)送工作,極大地提高了工作效率。
(3)本文僅針對南水北調(diào)東線調(diào)水過程中的簡報發(fā)送工作展開分析與研究,對于其他需要頻繁發(fā)送簡報的類似工作,具有較高的參考價值,可在此基礎(chǔ)上研究與推廣■