昨天在醫院檢查身體時,一個朋友打過來電話,咨詢EXCEL報表開發都有哪些方法,他們要上一個有200多個不同格式Excel報表的項目,雖然在醫院做全身檢查中,我還是給他提供了幾點建議。在這裡我順便總結下.NET平台下Excel報表開發的各種方法吧,供大家參考。
其實不僅僅是.NET平台,其他的任務開發平台和EXCEL報表互動,最終都會面臨2個問題:如何解析EXCEL報表和如何生成EXCEL報表。
下面就以這2個問題為出發點,來探讨一下各種方法。
方法一:通過Excel對象模型(COM接口)解析和生成EXCEL報表。
.NET通路Office對象模型是借鑒于VBA的,VBA是整合到所有Office應用程式中的一個簡單開發環境,每個Office程式都帶有豐富的對象模型并通過COM技術實作對這些模型的通路。但遺憾的的是VBA有一定的局限性,VBA的開發環境過于簡單,功能有限,VBA将代碼嵌入到每個自定義文檔中,這就使得修複漏洞和更新解決方案變得困難。微軟為了讓老的VBA程式員過渡到.NET平台繼續開發Office程式,就進行技術更新,産生一種稱為COM interop的.NET技術與.NET中的Office對象模型進行互動。本質上所有的Office對象模型都是用非托管代碼編寫的(比如C和C++),并提供COM接口。為了在托管代碼(C#,VB.NET)中與這些接口進行通信,必須使用封裝器,通過它來實作托段代碼與Office的非托管COM接口之間的協同工作。該封裝器是一系列的.NET類,它有一個更好的名字叫Office主互調程式集(PIA:Primary Interop Assemblies),PIA便是.NET用于和Office互動的托管程式集。如下圖:
這種方法能解析和生成EXCEL文檔,功能強大,可以讀寫到任意單元格,生成單元格樣式,合并單元格,支援圖表等等。可以在.NET任何項目中使用,但會面臨釋放托管資源的問題。很多朋友認為這種方法必須要裝EXCEL程式(Office),其實隻需要安裝PIA就可以了。PIA會在完全安裝Office時自動安裝,也可以在安裝Office的向導中選擇。但有個更好的方法是單獨安裝和分發PIA,微軟想到了這一點,你可以通過下面的連結單獨擷取PIA的分發包。
Office 2003 Update: Redistributable Primary Interop Assemblies:
http://www.microsoft.com/downloads/details.aspx?FamilyID=3c9a983a-ac14-4125-8ba0-d36d67e0f4ad&DisplayLang=en
2007 Microsoft Office System Update: Redistributable Primary Interop Assemblies:
http://www.microsoft.com/downloads/details.aspx?familyid=59DAEBAA-BED4-4282-A28C-B864D8BFA513&displaylang=en
Office PIA會被安裝到GAC目錄,GAC位于Windows目下的Assembly子目錄。
如果要使用PIA必須要先在項目中添加引用,如下圖:
Excel 2007的PIA是12.0,如上圖。Excel 2003PIA的是11.0。
方法二:通過OLEDb解析Excel報表。
OleDb解析Excel報表,本質上是通過OleDb驅動完成的,此時可以把Excel當做一張資料庫表來讀取,Excel 2003用的驅動是Microsoft.Jet.OLEDB.4.0 ,Excel 2007用的驅動是Microsoft.Ace.OleDb.12.0,OleDb在解析Excel功能上比較簡單,實際項目中往往運用此方法來擷取Excel資料,如下圖:
方法三:通過Access對象模型(COM接口)生成EXCEL報表。
此方法同方法一技術上類似,但是此時引用的PIA不是Excel的,而是Access的。如下圖:
Access 2007的PIA是12.0,如上圖。Access 2003PIA的是11.0。
通過Access PIA,可以把Access 資料庫中的表完美快速的生成到Excel工作薄中,可以同時生成多個工作表,速度非常之快,日期類型,貨币類型,長格式數值,都會自動轉成文本,不存在’#’或科學計數的問題。
方法四:通過開放Open Xml生成Excel報表
這種方法是基于Office Open Xml的,伺服器和用戶端都不需要安裝Excel,可以在.NET任何項目中使用,開發難度高,但部署成本比較低。在格式方面,Open Xml對單元格樣式控制能力很強,可以生成各種格式的單元,生成Excel的效率也非常高。
下圖的中2個标注的地方都運用了這種技術生成Excel報表。
方法五:通過水晶報表和微軟報表生成Excel報表
水晶報表功能強大,能生成複雜Excel報表,但是它是收費的。
而微軟報表(Microsoft RepoertViewer)功能強大,本質上是微軟借鑒水晶報表開發的,是以和水晶報表沒什麼兩樣,而且直接內建到了Visual Studio中。微軟報表可以在.NET任何項目中使用,不僅可以生成EXCEL報表,還可以生成PDF等。下圖是微軟報表的一個應用,這個報表預設是橫向列印:
說到這,不得不提微軟資料庫系統中的SSRS,這個報表服務引擎非常強大,不僅包含建立報表的功能,還包括管理和通路報表的功能,這是一個真正的企業級報表平台。
方法六:通過建構HTML标簽向用戶端生成Excel報表。
這種方法,在asp.net項目中很常見,尤其是在生成中國式的報表項目中非常常用。這種方法首先是構造HTML标簽,生成指定的格式,填充資料,最後發送用戶端,儲存成Excel報表格式。當然這種發放就更不需要安裝Excel程式了。
方法七:通過構造CVS格式生成EXCEL報表。
這種方法隻能生成無格式的Excel報表,不需要安裝Excel程式。
方法八:通過開源軟體解析和生成Excel報表(基于BIFF)。
開源項目中有2個解析和生成Excel檔案的精品:Koogra和Myxls,他們都是基于BINARY FILE FORMAT(BIFF)的Excel檔案結構形式開發的。運用這個開源項目進行解析和生成Excel報表都不需要安裝Office,部署友善。
Koogra用于解析Excel檔案。Myxls用于生成Excel檔案。
先總結這8種方法,但是實際上還有其他的方法,比如強大的Active-x報表等等。
本文轉自terryli51CTO部落格,原文連結:http://blog.51cto.com/terryli/372820 ,如需轉載請自行聯系原作者