解析和生成Excel报表方法汇总(转) - chengg0769 来自四川,在东莞虚度十载 - 博客频道 - CSDN.NET chengg0769 来自四川,在东莞虚度十载 PB反编译_Powerbuilder DeCompiler_PB反编译器_PB混淆器_PB加密 目录视图 摘要视图 订阅 新年新气象------CSDN2014新版导航就要跟大家见面了 2014年1月微软MVP当选名单揭晓! “我的2013”年度征文活动火爆进行中! 专访何海涛:“不正经”程序员的进阶之路 解析和生成Excel报表方法汇总(转) 2010-09-12 06:09 1196人阅读 评论(0) 收藏 举报 excel报表officeinteropvba.net 原文:http://terryli.blog.51cto.com/704315/372820 昨天在医院检查身体时,一个朋友打过来电话,咨询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 更多 上一篇:Powerbuilder混淆器改成正式版和中文界面 下一篇:Flex技术在企业级开发中的应用(转) 查看评论 * 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场 核心技术类目 全部主题 Java VPN Android iOS ERP IE10 Eclipse CRM JavaScript Ubuntu NFC WAP jQuery 数据库 BI HTML5 Spring Apache Hadoop .NET API HTML SDK IIS Fedora XML LBS Unity Splashtop UML components Windows Mobile Rails QEMU KDE Cassandra CloudStack FTC coremail OPhone CouchBase 云计算 iOS6 Rackspace Web App SpringSide Maemo Compuware 大数据 aptech Perl Tornado Ruby Hibernate ThinkPHP Spark HBase Pure Solr Angular Cloud Foundry Redis Scala Django Bootstrap 个人资料 chengg0769 访问:517416次 积分:8562分 排名:第419名 原创:267篇 转载:211篇 译文:0篇 评论:348条 文章搜索 文章分类 PB反编译与加密(12) IOS和安卓(9) PB与数据库(9) 网络相关(1) 搜索相关(0) 闲话扯起耍(1) 其他语言(4) 文章存档 2013年12月(2)2013年11月(2)2013年09月(1)2013年02月(1)2012年11月(1)2012年09月(1)2012年08月(6)2012年07月(1)2012年05月(3)2012年03月(4)2011年12月(2)2011年11月(2)2011年10月(9)2011年09月(6)2011年08月(11)2011年07月(2)2011年06月(4)2011年04月(3)2010年12月(1)2010年10月(2)2010年09月(8)2010年08月(1)2010年07月(8)2010年06月(17)2010年05月(2)2010年04月(2)2010年03月(4)2010年01月(1)2009年09月(8)2009年08月(5)2009年07月(8)2009年06月(8)2009年05月(16)2009年03月(2)2009年02月(7)2008年12月(2)2008年11月(4)2008年10月(5)2008年08月(1)2008年07月(2)2008年01月(12)2007年12月(29)2007年11月(7)2007年10月(4)2007年09月(20)2007年08月(55)2007年07月(176) 阅读排行 搜索引擎学习资源(作者:dongdonglang)(14656) 做代理网站最有效的4种宣传方法(admin9.com)(12036) 再谈powerbuilder程序防止破解的办法(终结篇,以后不再写这个问题)(8098) 程序员的SEO总结(7462) 浅谈Powerbuilder的未来和Powerbuilder使用者的未来(6027) 在一台联想3000G430 T1600笔记本上安装黑苹果(东皇v10.6.3)成功(5958) PowerBuilder DeCompiler(pb decompiler) Demo download(PB反编译,支持5-12)(5926) PB11.5,PB12 web项目初探(5648) 文件夹加密原理 [转](5643) powerbuilder反编译器开发-第一步:pbd结构分析和pbkiller分析(5493) 评论排行 浅谈Powerbuilder的未来和Powerbuilder使用者的未来(49) 程序员的SEO总结(32) 有关Powerbuilder的悲观论和乐观论(由郭贴引发的300多贴争辩想到的,也是很久就想秉明的一个观点)(22) Powerbuilder混淆,加密(powerbuilder防止反编译,pb混淆器,PB加壳,支持5-12) obfuscator for PowerBuilder(20) 戏说DataWindow的“移植”和“临摹”(19) 因为垄断形成,数据库市场将出现更多开源数据库(19) 免费软件模式之随想(18) 软件提交到国外的下载站的几点操作和想法(15) PB11.5,PB12 web项目初探(15) 关于对pbd反编译器的期待(11) 推荐文章 最新评论 安装两个BCB6控件SynEdit、mwEdit 0.92a的过程总结 jiduxiaozhang12345: 请问BCB6的第三方控件在哪下载啊?急求 Powershield一个疑似的BUG zhj149: 高手啊,看你的文章,感觉你玩pb已经到了极致的境界了,我自认为pb还不错,和你比起来,还是差了太多了 软件提交到国外的下载站的几点操作和想法 u012353953: 楼主在吗?有个问题请教,看到请加我QQ,谢谢。17493589 Lucene(Nutch)距离商业文本搜索引擎还有多远?(转载) koubi1986: 你好!请教一些问题:请问一下1。你是如何把nutch抓取到的二进制内容,在项目中读取的。2。nutc... 看一个商业共享软件是如何在下载站刷下载量来作弊的! u011506701: 您的判断是有误的,像我研究的刷量算法你就根本看不出来,出现的曲线图跟正常的一模一样的,附:刷量是最好... 垂直搜索引擎蜘蛛的基本解决方案(编程实例:所以推荐) gis101989: 你好,我正在写面向主题搜索引擎结合地理信息的论文,很多地方不懂,能加个扣扣吗?非常感谢你的帮助,我的... 浅谈Powerbuilder的未来和Powerbuilder使用者的未来 hosthelp: PB的最大缺点就是:(其实很简单)过时了。 服装过时就没人穿了, 电器过时就没人买了, 明星过时(过... 三岁小孩开发搜索引擎,搜索引擎白热化[原创] rongzi1987: 顶一个。先顶再看 再谈powerbuilder程序防止破解的办法(终结篇,以后不再写这个问题) hua2000: 顶顶更健康正在研究反向工程 有个傻B说破解了我的软件—哈哈!黄金屋手机MP3.MP4.3GP.电影.下载系统 ljx811216: 真有这事,看看 我的未来方向 pconline/asp.net周金桥老师的aspnet 友人Blog 旧博客在sina Bluesen的语音卡开发平台 JackXu的开源语音卡框架 经验丰富的好友:杨光的专栏 蓝星际语音平台,Koodoo语言 Lucene改造者-yuetiantian 西部.阿呆's blog manesking:全文检索c/c fullfocus研究lucene,nutch 黄国酬的博客 把“天轰穿”的asp.net 雨松.安卓