解析和生成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 对象模型都是用非托管代码编写的 ( 比如 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报表等等。

你可能感兴趣的:(Excel,net,解析excel,休闲,生成excel)