昨天在医院检查身体时,一个朋友打过来电话,咨询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报表等等。
本文出自 “李涛的技术专栏” 博客,出处http://terryli.blog.51cto.com/704315/372820
分享到:
相关推荐
为了解决这个问题,Java开发领域出现了许多库,其中EasyPoi是一款广泛应用的工具,它能够方便地生成Excel报表,支持xls和xlsx两种格式。本文将详细介绍如何使用EasyPoi模板来导出Excel报表,并深入探讨其背后的原理...
Dorado 的 Excel 报表功能在设计时考虑了轻量级的特性,使得它能够快速、高效地生成各种类型的报表,同时允许用户利用 Excel 的内置功能进一步自定义和扩展报表。 1. **主从报表**:在 Dorado 中,主从报表允许用户...
这种方法简单易懂,适用于需要批量生成Excel文件的场景。 ### 二、Java实现生成Excel文件的关键技术点 #### 1. 使用Java IO流操作 Java提供了强大的IO流操作功能,可以方便地读写各种类型的文件,包括文本文件、...
- 使用开源工具:如Apache POI用于生成Excel报表,JasperReports、BIRT等用于生成PDF或HTML报表。 - 自定义开发:基于源码开发,可以更灵活地控制报表的每个细节,但开发成本较高。 6. **动态生成与定时任务** -...
在这个“labview 发票识别,自动生成excel 汇总信息”的项目中,我们可以推断出以下几个关键知识点: 1. 图像处理与OCR技术:发票识别涉及到图像处理,可能使用了光学字符识别(OCR)技术来提取发票上的文字信息。...
文件Unit4.dcu、Unit5.dcu、Unit3.dcu、UnitOther.dcu是Delphi的编译后单元文件,它们包含了编译后的类和方法定义。而Unit5.ddp、Unit4.ddp、Unit3.ddp则是项目文件,记录了工程的编译设置、源文件依赖关系等信息。...
### WinCC数据报表实现方法深度解析 在现代工业自动化领域,数据报表的生成与管理扮演着至关重要的角色,尤其在确保生产效率与质量控制方面。西门子的WinCC(Windows Control Center)作为一款功能全面的监控与数据...
在Java编程中,解析Excel文件是一项常见的任务,特别是在数据处理、报表生成或数据分析等领域。Excel文件格式主要有两种:老式的`.xls`(基于BIFF格式)和较新的`.xlsx`(基于Open XML标准)。本篇将详细介绍如何...
《Excel在会计报表中的应用深度解析》 Excel作为一款强大的电子表格工具,广泛应用于会计领域,尤其是编制会计报表。"Excel模板会计报表1.zip"这个压缩包文件,包含了一个名为"会计报表1.xls"的Excel文件,这显然是...
4. **分组和汇总**:Fast Report支持复杂的数据分组和汇总,可以实现多级分组、总计、平均值、最大值、最小值等统计计算,帮助用户生成分析报告。 5. **跨平台支持**:除了Windows,Fast Report还适用于其他平台,...
《利用CrystalReports与C#生成报表的深度解析》 在信息技术领域,数据的展示和分析是至关重要的。水晶报表(Crystal Reports)作为一款强大的报表工具,结合C#编程语言,可以构建出功能丰富的报告系统。本文将深入...
在IT领域,Excel是一款广泛应用的数据处理工具,尤其在2003和2007这两个版本中,它已经成为了商业数据分析、报表制作和数据管理的标准软件。本文将深入解析Excel表格2003和2007的主要特性和功能,帮助用户更好地理解...
对于“导出报表至Excel”,这意味着不仅导出数值数据,还包括报表中的分类、汇总等信息。 2. **图片导出**:报表中往往包含图表,如柱状图、折线图或饼图等,这些图表能直观展示数据趋势和对比。将图片导出至Excel...
9. **宏与VBA编程**:对于高级用户,Excel的宏和VBA(Visual Basic for Applications)可以编写自动化脚本,实现复杂的计算任务和自定义功能,如自动生成报表、数据导入导出等。 总结起来,Excel模板财务报表结合了...
总的来说,《Java报表开发技术深入解析》这本书全面覆盖了Java环境下报表开发的各个方面,对于提升Java开发者的报表设计和实现能力具有极大的价值。通过深入学习,读者将能够创建出专业、高效且具有互动性的报表,...
《Excel模板在生产汇总表中的应用深度解析》 在当今数据驱动的时代,高效的数据管理和分析已经成为企业运营的关键。Excel作为一款强大的电子表格工具,因其易用性和灵活性,被广泛应用于各个行业的数据分析,尤其是...
对于更复杂的数据结构,比如需要从数据库查询数据并导出到Excel文件,可以使用DataSet作为中间数据容器,然后按照一定的格式生成Excel文件。 ```csharp public void CreateExcel(DataSet ds, string FileName) { /...
《Excel模板在财务收支报表中的应用深度解析》 在财务管理中,精确、高效的数据记录与分析至关重要。Excel作为一款强大的电子表格工具,被广泛应用于财务收支报表的制作中。"Excel模板财务收支报表.zip"这一压缩包...
通过对领用人、领用日期、用途等字段进行分组和汇总,可以快速生成各种统计报告,为企业决策提供数据支持。 最后,为了便于数据更新和共享,Excel模板通常会采用链接和引用的方式,将相关的数据源连接在一起。一旦...
现金余额日报表的Excel模板,更是将这些优势发挥到极致,提供了一种标准化、规范化的数据记录和分析方式,帮助财务人员快速生成报表,提高工作效率。 二、现金余额日报表的构成 1. **基本信息区**:通常包含日期、...