解析和生成Excel报表方法汇总::.NET发现之旅(七)

本文涉及的产品
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介:


昨天在医院检查身体时,一个朋友打过来电话,咨询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 等。下图是微软报表的一个应用,这个报表默认是横向打印:
 
说到这,不得不提微软数据库系统中的 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 ,如需转载请自行联系原作者


相关文章
|
16天前
|
vr&ar
简单易懂的 全景图高清下载方法以及原理简要解析(支持下载建E、720yun、酷雷曼、景站、酷家乐、百度街景原图)
这篇文章介绍了一种简单易懂的全景图高清下载方法,使用在线网站全景管家,支持下载包括建E、720yun、酷雷曼等多个平台的全景图原图,并简要解析了全景图的原理和制作方法。
简单易懂的 全景图高清下载方法以及原理简要解析(支持下载建E、720yun、酷雷曼、景站、酷家乐、百度街景原图)
|
8天前
|
监控 网络协议 API
.NET WebSocket 技术深入解析,你学会了吗?
【9月更文挑战第4天】WebSocket 作为一种全双工协议,凭借低延迟和高性能特点,成为实时应用的首选技术。.NET 框架提供了强大的 WebSocket 支持,使实时通信变得简单。本文介绍 WebSocket 的基本概念、.NET 中的使用方法及编程模型,并探讨其在实时聊天、监控、在线游戏和协同编辑等场景的应用,同时分享最佳实践,帮助开发者构建高效实时应用。
48 12
|
13天前
|
项目管理 敏捷开发 开发框架
敏捷与瀑布的对决:解析Xamarin项目管理中如何运用敏捷方法提升开发效率并应对市场变化
【8月更文挑战第31天】在数字化时代,项目管理对软件开发至关重要,尤其是在跨平台框架 Xamarin 中。本文《Xamarin 项目管理:敏捷方法的应用》通过对比传统瀑布方法与敏捷方法,揭示敏捷在 Xamarin 项目中的优势。瀑布方法按线性顺序推进,适用于需求固定的小型项目;而敏捷方法如 Scrum 则强调迭代和增量开发,更适合需求多变、竞争激烈的环境。通过详细分析两种方法在 Xamarin 项目中的实际应用,本文展示了敏捷方法如何提高灵活性、适应性和开发效率,使其成为 Xamarin 项目成功的利器。
34 1
|
18天前
|
监控 安全 iOS开发
|
13天前
|
C# Windows 开发者
超越选择焦虑:深入解析WinForms、WPF与UWP——谁才是打造顶级.NET桌面应用的终极利器?从开发效率到视觉享受,全面解读三大框架优劣,助你精准匹配项目需求,构建完美桌面应用生态系统
【8月更文挑战第31天】.NET框架为开发者提供了多种桌面应用开发选项,包括WinForms、WPF和UWP。WinForms简单易用,适合快速开发基本应用;WPF提供强大的UI设计工具和丰富的视觉体验,支持XAML,易于实现复杂布局;UWP专为Windows 10设计,支持多设备,充分利用现代硬件特性。本文通过示例代码详细介绍这三种框架的特点,帮助读者根据项目需求做出明智选择。以下是各框架的简单示例代码,便于理解其基本用法。
51 0
|
14天前
|
安全 数据安全/隐私保护 架构师
用Vaadin打造坚不可摧的企业级应用:安全性考虑全解析
【8月更文挑战第31天】韩林是某金融科技公司的架构师,负责构建安全的企业级应用。在众多Web框架中,他选择了简化UI设计并内置多项安全特性的Vaadin。韩林在其技术博客中分享了使用Vaadin时的安全考虑与实现方法,包括数据加密、SSL/TLS保护、结合Spring Security的用户认证、XSS防护、CSRF防御及事务性UI更新机制。他强调,虽然Vaadin提供了丰富的安全功能,但还需根据具体需求进行调整和增强。通过合理设计,可以构建高效且安全的企业级Web应用。
25 0
|
14天前
|
前端开发 JavaScript 开发者
React生命周期方法完全指南:深入理解并高效应用每个阶段的钩子——从初始化到卸载的全方位解析
【8月更文挑战第31天】本文详细介绍了React组件生命周期方法,包括初始化、挂载、更新和卸载四个阶段的关键钩子。通过探讨每个阶段的方法,如`componentDidMount`和`componentWillUnmount`,帮助开发者在正确时机执行所需操作,提升应用性能。文章还提供了最佳实践,指导如何避免常见错误并充分利用最新钩子。
24 0
|
21天前
【Azure 应用服务】App Service 配置 Application Settings 访问Storage Account得到 could not be resolved: '*.file.core.windows.net'的报错。没有解析成对应中国区 Storage Account地址 *.file.core.chinacloudapi.cn
【Azure 应用服务】App Service 配置 Application Settings 访问Storage Account得到 could not be resolved: '*.file.core.windows.net'的报错。没有解析成对应中国区 Storage Account地址 *.file.core.chinacloudapi.cn
|
15天前
|
监控 网络协议 Java
Tomcat源码解析】整体架构组成及核心组件
Tomcat,原名Catalina,是一款优雅轻盈的Web服务器,自4.x版本起扩展了JSP、EL等功能,超越了单纯的Servlet容器范畴。Servlet是Sun公司为Java编程Web应用制定的规范,Tomcat作为Servlet容器,负责构建Request与Response对象,并执行业务逻辑。
Tomcat源码解析】整体架构组成及核心组件
|
1月前
|
存储 NoSQL Redis
redis 6源码解析之 object
redis 6源码解析之 object
52 6

热门文章

最新文章

推荐镜像

更多