解析和生成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报表等等。
相关文章
相关标签/搜索