解析和生成Excel報表方法彙總::.NET發現之旅(七)

昨天在醫院檢查身體時,一個朋友打過來電話,諮詢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對象模型都是用非託管代碼編寫的(好比CC++),並提供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 等。下圖是微軟報表的一個應用,這個報表默認是橫向打印:
 
說到這,不得不提微軟數據庫系統中的 ×××S ,這個報表服務引擎很是強大,不只包含建立報表的功能,還包括管理和訪問報表的功能,這是一個真正的企業級報表平臺。
 
 
方法六:經過構建 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報表等等。
相關文章
相關標籤/搜索