趙小娟,王才善
(蘭州交通大學光電技術與智能控制教育部重點實驗室,蘭州730070)
隨著企業管理系統的廣泛應用,越來越多的企業趨向于使用電子報表進行企業生產管理。報表作為一種信息統計和分析的重要手段,已成為信息系統的重要組成部分之一,而中國式報表的復雜性使得一些報表軟件無法直接應用,如何將數據進行統計生成到報表中去,特別是生成到Excel電子表格中,就成為管理系統軟件開發經常遇到的問題。本文結合洛陽石化鐵路運輸調度管理系統報表的設計,給出一個在.NET平臺上,使用Orcal數據庫和Excel開發報表應用的實例,從而提出一種基于Excel的報表開發方案。
報表生成系統能及時、準確的反應企業實時的生產狀況及現場等數據信息,方便企業管理。構成企業報表的基本要素有報表數據、報表格式和報表輸出。
報表數據主要分為生產數據和管理數據,生產數據是企業生產過程中產生和采集的實時數據和歷史數據,例如鐵路運輸調度過程中的車數、車號、進出場時間等信息。管理數據是指企業管理中涉及的數據,如操作人員的信息、班次及工作考核情況等。
生產報表包括原始數據和統計數據,這些數據是各個系統運行時存入數據庫的數據。報表設計時應考慮以下幾點需求:
(1)對采集到或處理后的數據有定期(日、周、旬、月、季度、年)或不定期(階段)展現的要求。
(2)對數據進行分類、統計求和、求差、求平均值、求最值等計算的要求。
(3)對采集到的數據有分組、分欄、排序顯示的需求。
在設計企業生產報表的過程中,對報表展現格式也有很高的要求,表1列出了幾個鐵路運輸調度管理系統中生產報表的格式情況,主要有簡單列表、分組報表、分欄報表和交叉報表等。因此需要設計的報表系統能夠展現各種各樣的報表格式。

表1 鐵路運輸調度管理系統生產報表格式
隨著企業信息化管理系統的應用,一般對報表的輸出有以下幾點要求:
(1)支持多種格式輸出。要求報表能以各種不同的文件格式輸出及打印,可以與不同辦公軟件進行交互,能夠導出Excel、Pdf、Word等常用格式文件,主要導出Excel文件。
(2)支持各類輸出設備。要求報表生成系統能夠將報表輸出到各種設備,如支持多種打印機,對生成的報表可進行精確的打印。
(3)支持導出報表可編輯。要求導出的報表可以進行人工編輯修改。
整個報表生成系統的設計,遵循了軟件設計的分層結構,主要分為3層如圖1。最上層為用戶界面層(UI層),進行與用戶的交互、報表的顯示、導出和打印。中間層為業務邏輯層,進行邏輯運算、報表模板讀取、實現報表數據填充。底層為數據訪問層和通信層,數據訪問層直接和數據庫連接,實現數據篩選、統計、運算。通信層主要為TCP/IP通信和串口通信,實現數據傳輸。
針對報表生成系統的通用性要求,整個系統采用了對象、組件技術進行開發。實現基于Excel的COM組件,結合ADO.NET技術和標準的PL/SQL語句的報表生成方法。

圖1 報表生成系統結構圖
數據訪問層采用接口實現,主要完成對數據庫的操作和與邏輯層的數據交互,數據訪問層應用了ADO.NET組件,通過調用ADO.NET提供的各種類庫(即Data Providers)方便訪問不同的數據庫,實現應用程序與數據庫的交互。數據訪問層通過ADO.NET對象建立與數據庫的連接,調用數據庫的存儲過程,提取Excel報表所需的數據,將其存入建立好的DataSet對象中,此時可以斷開與數據庫的連接,將操作得到的DataSet返回給業務邏輯層,作為報表的數據源。
系統采用C/S和B/S混合架構設計,如圖2。C/S的業務邏輯層程序運行在客戶機上,B/S的業務邏輯層程序運行在Web服務器上。

圖2 C/S和B/S混合模型結構圖
業務邏輯層主要完成報表數據的二次篩選、報表模板讀取和報表數據填充,主要功能分為3個部分:傳遞數據到數據訪問層,接收從數據訪問層返回的數據;獲得從UI層傳來的數據,傳遞數據到UI層;實現數據二次處理、邏輯運算等。在邏輯層通過C#.NET創建Excel報表之前,需要在工程中添加一個Excel的COM組件,在應用程序中使用其提供的對象、方法開發Excel報表。邏輯層接收UI層傳遞的參數,調用數據訪問層接口,獲得數據源,再通過COM接口庫將數據源填充到報表模板中,形成報表文件。如果數據訪問層返回的DataSet還不滿足條件,可在邏輯層使用LINQ語句進行篩選、統計。例如對篩選出來的數據可以使用LINQ語句進行分組、統計匯總等。同時邏輯層也控制報表文件的輸出格式,將最后形成的報表文件傳遞到用戶界面層顯示。
模板文件是一個XLT格式的Excel文件,是定義報表生成數據時的具體方式。在模板中定義好表頭區域、報表數據區和表結尾區。表頭區域可以設置為固定表頭,也可以設置為動態表頭,根據需要進行選擇。報表數據區是一個自適應區域,它隨著數據的增長自動增長。報表結尾區隨著數據區的變化自動向后移動,始終保持在數據區下方。在Excel工作簿中繪制所需的報表樣式,設置模板格式化信息及公式,設置好后保存為模板格式,這樣就完成了模板文件的制作。使用模板文件可以確保創建的文件格式保持一致,調用模板時,系統打開的是一個工作備份,不會破壞模板文件。
用戶界面層是系統與用戶交互的主要部分,提供了數據的錄入和顯示。設計用戶登陸界面,使用戶通過崗位名稱、用戶名和密碼登錄系統,在數據庫中設計用戶權限表和功能模塊表,該表由系統管理員進行維護,用戶登錄時,根據用戶名和崗位在用戶權限表中查找相應權限,在用戶操作界面顯示相應功能模塊。報表生成系統嵌入在統計管理模塊中,報表生成界面顯示用戶可以查詢的報表類型和名稱,提供查詢條件的輸入,比如輸入要查詢的開始時間、結束時間、股道和班次等。同時判斷輸入條件的合法性,若輸入條件不正確,則給出提示信息。界面上還設計了相應的操作按鈕,提供報表生成、導出、打印、預覽、格式選擇和退出等按鈕功能。通過觸發按鈕事件將用戶的操作和選擇以參數形式傳遞給邏輯層進行邏輯處理。同時,用戶界面層也接收邏輯層返回的報表文件,實現報表的展現。
(1)數據訪問層實現,部分代碼如下:

(2)報表模板調用,部分代碼如下:

(4)關閉進程、釋放資源:

在填寫Excel過程中可能會有異常發生,需要使用異常處理機制,給用戶提示信息,采取相應措施,使程序可以繼續運行。
在洛陽石化鐵路運輸調度管理系統報表生成子系統中,采用了基于Excel的分層模板架構的報表設計思路和方法,主要實現了企業的各類生產報表的生成、導出和打印如圖3。該系統的應用不僅滿足企業的生產需求,也減輕了操作人員統計報表的工作量,提高了工作效率。

圖3 洛陽分公司鐵路運輸部生產日報
在.NET環境下,通過運用數據庫技術、模板技術和組件技術,采用C#語言設計了基于Excel的分層式模板架構的企業報表生成系統,實現了企業對報表的需求。采用Excel實現,使頁面布局設計靈活,方便用戶的操作,滿足了企業對報表要求,成功開發了洛陽石化鐵路運輸調度管理系統報表生成子系統,項目實施后具有很好的執行效率和穩定性,得到了用戶好評,證明了該方案具有很好的推廣價值和研究意義。
[1] 陳國華. 基于Excel的報表引擎的研究與設計[J] . 計算機工程與設計,2004,25(4):526.
[3] 東方人華,鄒敬. Visual C#.NET 范例入門與提高[M] . 北京:清華大學出版社, 2003.
[4] 吳雷,袁兆山,李超. B/S結構下的復雜報表實現技術的研究[J] . 計算機應用研究,2006,23(5):83-85.
[5] 吳鉑,吳秀麗,孫樹棟. 基于設計模式的報表生成組件的設計與實現[J] . 計算機工程與應用,2004, 40(16):113-115,118.
[6] Timothy Zapawa. Excel Advanced Report Development[M] .Publishing House of Electronics Industry, 2006.1.
[7] R. Kishore, H. Zhang, R. Ramesh. Enterprise integration using the agent paradigm: foundations of multi-agent-based integrative business information systems[J] . Decision Support Systems, 2006, 42(1): 48-78.