解析和生成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 等。下图是微软报表的一个应用,这个报表默认是横向打印:
 
说到这,不得不提微软数据库系统中的 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 ,如需转载请自行联系原作者


相关文章
|
3月前
|
存储 算法 安全
.NET 平台 SM2 国密算法 License 证书生成深度解析
授权证书文件的后缀通常取决于其编码格式和具体用途。本文档通过一个示例程序展示了如何在 .NET 平台上使用国密 SM2 算法生成和验证许可证(License)文件。该示例不仅详细演示了 SM2 国密算法的实际应用场景,还提供了关于如何高效处理大规模许可证文件生成任务的技术参考。通过对不同并发策略的性能测试,开发者可以更好地理解如何优化许可证生成流程,以满足高并发和大数据量的需求。 希望这段描述更清晰地传达了程序的功能和技术亮点。
221 13
.NET 平台 SM2 国密算法 License 证书生成深度解析
|
4月前
|
监控 安全 网络安全
深入解析PDCERF:网络安全应急响应的六阶段方法
PDCERF是网络安全应急响应的六阶段方法,涵盖准备、检测、抑制、根除、恢复和跟进。本文详细解析各阶段目标与操作步骤,并附图例,助读者理解与应用,提升组织应对安全事件的能力。
652 89
|
2月前
|
开发框架 .NET 中间件
.net8 使用 license 证书授权案例解析
本文介绍了如何使用 `.NET CLI` 创建并改造一个 `ASP.NET Core Web API` 项目,以实现基于许可证的授权机制。具体步骤包括创建项目、添加必要的 NuGet 包(如 `Standard.Licensing` 和 `Swashbuckle.AspNetCore`),以及修改 `Program.cs` 文件以集成自定义的许可证验证中间件。项目结构中新增了 `LicenseController` 接口用于处理授权相关操作,并通过测试流程验证了默认天气接口在未授权和授权状态下的响应情况。整个过程确保了应用程序能够在启动时正确验证许可证,保障系统的安全性与可控性。
121 8
.net8 使用 license 证书授权案例解析
|
5月前
|
人工智能 自然语言处理 Java
FastExcel:开源的 JAVA 解析 Excel 工具,集成 AI 通过自然语言处理 Excel 文件,完全兼容 EasyExcel
FastExcel 是一款基于 Java 的高性能 Excel 处理工具,专注于优化大规模数据处理,提供简洁易用的 API 和流式操作能力,支持从 EasyExcel 无缝迁移。
859 65
FastExcel:开源的 JAVA 解析 Excel 工具,集成 AI 通过自然语言处理 Excel 文件,完全兼容 EasyExcel
|
3月前
|
编解码 缓存 Prometheus
「ximagine」业余爱好者的非专业显示器测试流程规范,同时也是本账号输出内容的数据来源!如何测试显示器?荒岛整理总结出多种测试方法和注意事项,以及粗浅的原理解析!
本期内容为「ximagine」频道《显示器测试流程》的规范及标准,我们主要使用Calman、DisplayCAL、i1Profiler等软件及CA410、Spyder X、i1Pro 2等设备,是我们目前制作内容数据的重要来源,我们深知所做的仍是比较表面的活儿,和工程师、科研人员相比有着不小的差距,测试并不复杂,但是相当繁琐,收集整理测试无不花费大量时间精力,内容不完善或者有错误的地方,希望大佬指出我们好改进!
241 16
「ximagine」业余爱好者的非专业显示器测试流程规范,同时也是本账号输出内容的数据来源!如何测试显示器?荒岛整理总结出多种测试方法和注意事项,以及粗浅的原理解析!
|
5月前
|
存储 Java 开发者
浅析JVM方法解析、创建和链接
上一篇文章《你知道Java类是如何被加载的吗?》分析了HotSpot是如何加载Java类的,本文再来分析下Hotspot又是如何解析、创建和链接类方法的。
385 132
|
2月前
|
JSON 监控 网络协议
Bilibili直播信息流:连接方法与数据解析
本文详细介绍了自行实现B站直播WebSocket连接的完整流程。解析了基于WebSocket的应用层协议结构,涵盖认证包构建、心跳机制维护及数据包解析步骤,为开发者定制直播数据监控提供了完整技术方案。
|
2月前
|
安全 IDE Java
重学Java基础篇—Java Object类常用方法深度解析
Java中,Object类作为所有类的超类,提供了多个核心方法以支持对象的基本行为。其中,`toString()`用于对象的字符串表示,重写时应包含关键信息;`equals()`与`hashCode()`需成对重写,确保对象等价判断的一致性;`getClass()`用于运行时类型识别;`clone()`实现对象复制,需区分浅拷贝与深拷贝;`wait()/notify()`支持线程协作。此外,`finalize()`已过时,建议使用更安全的资源管理方式。合理运用这些方法,并遵循最佳实践,可提升代码质量与健壮性。
85 1
|
2月前
|
传感器 监控 Java
Java代码结构解析:类、方法、主函数(1分钟解剖室)
### Java代码结构简介 掌握Java代码结构如同拥有程序世界的建筑蓝图,类、方法和主函数构成“黄金三角”。类是独立的容器,承载成员变量和方法;方法实现特定功能,参数控制输入环境;主函数是程序入口。常见错误包括类名与文件名不匹配、忘记static修饰符和花括号未闭合。通过实战案例学习电商系统、游戏角色控制和物联网设备监控,理解类的作用、方法类型和主函数任务,避免典型错误,逐步提升编程能力。 **脑图速记法**:类如太空站,方法即舱段;main是发射台,static不能换;文件名对仗,括号要成双;参数是坐标,void不返航。
110 5
|
5月前
|
安全 Ubuntu Shell
深入解析 vsftpd 2.3.4 的笑脸漏洞及其检测方法
本文详细解析了 vsftpd 2.3.4 版本中的“笑脸漏洞”,该漏洞允许攻击者通过特定用户名和密码触发后门,获取远程代码执行权限。文章提供了漏洞概述、影响范围及一个 Python 脚本,用于检测目标服务器是否受此漏洞影响。通过连接至目标服务器并尝试登录特定用户名,脚本能够判断服务器是否存在该漏洞,并给出相应的警告信息。
335 84

推荐镜像

更多