ppchen(陈荣林)

。。。。。年轻没有什么不可以
posts - 9, comments - 46, trackbacks - 2, articles - 1
  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理

Excel2007操作类库

Posted on 2008-03-21 23:10 ppchen(陈荣林) 阅读(3787) 评论(40)  编辑 收藏 网摘 所属分类: OfficeC#
    发布一个最近完成的Excel2007操作类库,可以在没有安装Office的机器上快速读写和操作Excel2007格式文件,不过还是需要.net framework2.0  :)。生成效率比较高,写入10000行50列的数据只需12秒,如果数据是纯数字还会更快,我的机器Pentium M 1.8G CPU 1.25G Memory。

    Office2007中的Excel,Word,PowedPoint使用了OpenXml文件格式,文件是一个标准的zip压缩包,只需要简单的将文件的扩展名更改为.zip,就能看到其内部的具体内容,大部分是标准的xml文件,所以类库主要的任务就是操作xml。Excel2007的操作类库目前已经有人写过了如:ExcelPackage,最初因为项目需要也曾经改造过改类库,试图将之封装成可以结合报表数据分析工具的Excel2007报表生成工具,但是ExcelPackage内部的操作全部基于XmlDocument,效率低,生成简单的报表还可以,数据量稍微有点大就处理不过来了。

    开始研究怎么样才能提高效率的时候,思索了一阵子,基于XmlDocument的操作,涉及了XPath等操作都是基于文档的,许多XPath的查询都是需要遍历文档的,即使再怎么优化XPath也不能提高太多的效率。后面老大提醒了我,应该把所有XML的操作都放到内存当中去做,把Excel文件中的XML文档内容映射到内存中的自定义对象,在操作完成后再将内存中的对象写回zip压缩包中去。没错就是这个思路...

    编写这个类库的时候使用了System.IO.Packaging这个名称空间,该空间内提供了一些对zip文件的操作类,该空间位于WindowsBase.dll中,是一个.net3.x的库,其实还有一个可以实现和System.IO.Pacakaging类似功能的类库SharpZipLib,只是之前在编写Excel2007操作类库的时候还不知道,暂且从已经安装了.net3.x的同事那拷贝了WindwsBase.dll过来用,还好能顺利的在VS2005中引用且能正常使用。

    此类库目前已经结合一个报表数据分析引擎,在一个中型Web系统中实现Excel2007报表的功能。
 

下载:
Excel.OpenXml

如果你现在使用旧版office的话,可点这里下载格式转换工具,让你的office也支持OOXML。

Feedback

#1楼   回复  引用  查看    

2008-03-21 23:28 by 代码乱了      
好东西,不知道博主有没有考虑做一个兼容前面几个版本的Excel操作类库?
例如BIFF8的二进制读写,毕竟还有好多人在用office 2003

#2楼   回复  引用  查看    

2008-03-21 23:32 by 置身珠海,学习与奋斗      
感谢分享

#3楼   回复  引用  查看    

2008-03-21 23:37 by 浪子      
呵呵,你终于开博了,好的开始是成功的一半.

#4楼[楼主]   回复  引用  查看    

2008-03-21 23:38 by ppchen(陈荣林)      
@代码乱了
二进制读写已经有比较成熟的类库了,没必要再研究,更重要的是我对二进制的一窍不通 :)

#5楼[楼主]   回复  引用  查看    

2008-03-21 23:41 by ppchen(陈荣林)      
@浪子
谢谢鼓励 :)

#6楼   回复  引用  查看    

2008-03-21 23:59 by ※ABeen※      
谢谢分享

#7楼   回复  引用  查看    

2008-03-22 00:10 by KevinLi      
正需要谢谢
下去研究一下

#8楼   回复  引用  查看    

2008-03-22 06:02 by Jeff Yang      
感谢分享

#9楼   回复  引用  查看    

2008-03-22 09:07 by 毁于随      
为什么不提供源代码呢?

#10楼   回复  引用  查看    

2008-03-22 09:11 by 毁于随      
什么放在内存中去读写?你的意思是要放在资源文件里的模板文件加载到内存中,然后对这个进行操作吗?

#11楼   回复  引用  查看    

2008-03-22 09:23 by 毁于随      
晕了.没看明白.里面好多类.顺着ExcelPacket往下找,没有看到哪里是把文件加载到内存中,然后再操作的.难道是开发了所有的相关Excel的类,然后对这些类的实例操作?几十个类都是自己写的哦?那可需要对这些压缩包的内容相当了解了?请问从哪里得到的资料?

#12楼[楼主]   回复  引用  查看    

2008-03-22 09:41 by ppchen(陈荣林)      
@毁于随
就是把Excel里的对象转成自己抽出来的对象,就是你所说的“开发了所有的相关Excel的类”不过不是所有,Excel里的东西太多了,要写完所有的没那么容易。

参考资料比较少,使用XmlDocument编写的ExcelPackage开源类库就是不错的文档了,其他的就自己研究了

#13楼[楼主]   回复  引用  查看    

2008-03-22 09:52 by ppchen(陈荣林)      
推介一些相关文章和站点
http://www.cnblogs.com/skyivben/archive/2007/09/23/903582.html" target="_new">http://www.cnblogs.com/skyivben/archive/2007/09/23/903582.html
http://www.codeplex.com/ExcelPackage" target="_new">http://www.codeplex.com/ExcelPackage
http://www.openxml.org/" target="_new">http://www.openxml.org/
http://openxmldeveloper.org/default.aspx target="_new">http://openxmldeveloper.org/default.aspx

#14楼   回复  引用  查看    

2008-03-22 10:02 by airwolf2026      
同问

#15楼   回复  引用  查看    

2008-03-22 11:25 by G yc {Son of VB}      
请问 这个 和 Open XML SDK(http://download.microsoft.com/download/7/7/3/7737344c-40f6-47f3-9f5e-be8e7a7a0a89/OpenXMLSDK.msi" target="_new">http://download.microsoft.com/download/7/7/3/7737344c-40f6-47f3-9f5e-be8e7a7a0a89/OpenXMLSDK.msi

有什么区别?谢谢

#16楼[楼主]   回复  引用  查看    

2008-03-22 11:54 by ppchen(陈荣林)      
@G yc {Son of VB}
SDK? 汗哦!没找到这个东西,我先看看。

#17楼[楼主]   回复  引用  查看    

2008-03-22 12:07 by ppchen(陈荣林)      
@G yc {Son of VB}
好东西!相见恨晚啊,55555555
下班了,回家好好研究下。

#18楼   回复  引用    

2008-03-22 23:48 by wyjx[未注册用户]
lz,ms没有什么东西没有sdk的。

#19楼[楼主]   回复  引用  查看    

2008-03-23 12:34 by ppchen(陈荣林)      
@G yc {Son of VB}
老实说,那个SDK还不咋地,只有内部文件包的管理,仅提供一个模型。

另附:我找到的一些使用方法:
http://www.cnblogs.com/derek/archive/2007/06/06/773932.html" target="_new">http://www.cnblogs.com/derek/archive/2007/06/06/773932.html
http://msdn2.microsoft.com/zh-cn/library/bb739834.aspx" target="_new">http://msdn2.microsoft.com/zh-cn/library/bb739834.aspx
http://blog.csdn.net/devilxelloss/archive/2007/08/02/1722521.aspx" target="_new">http://blog.csdn.net/devilxelloss/archive/2007/08/02/1722521.aspx

#20楼   回复  引用  查看    

2008-03-23 14:15 by G yc {Son of VB}      
@ppchen(陈荣林)

那个SDK还是一个beta ,主要原因为是Open XML 还没有正式发布,(据说现在1.0的草稿已经完成,正在想ECMA 提交审核)

#21楼   回复  引用    

2008-03-28 13:32 by ffa[未注册用户]
请问怎么在web里用啊?是否兼容2003.

#22楼   回复  引用    

2008-04-03 16:33 by 匿名[未注册用户]
可以在没有安装Office的机器上快速读写和操作Excel2007格式文件?

好象引用了Interop.Excel.dll 文件?

#23楼[楼主]   回复  引用  查看    

2008-04-03 17:21 by ppchen(陈荣林)      
@匿名
那个是为结合文中有提到的报表数据分析引擎才加入的,可以把Interop.Excel.dll的引用踢掉,并删除与之相关的类。

#24楼   回复  引用    

2008-04-11 11:58 by 猪头大猪头[未注册用户]
请问怎么设置单元格的对齐,和颜色,找了半天,我还是没找到这几个属性

#25楼   回复  引用    

2008-06-12 15:34 by hughhan[未注册用户]
ExcelPackage Excel = new ExcelPackage(newfile, templetefile);
基于模板创建一个excel文件的时候会报错。
有没有源码?
谢谢

#26楼   回复  引用    

2008-06-16 14:06 by sssss[未注册用户]
今天使用了你的代码,
用来读取一个.xlsx文件,发现有BUG
我循环行循环列,发现有些是乱的

#27楼[楼主]   回复  引用  查看    

2008-06-16 15:34 by ppchen(陈荣林)      

@猪头大猪头
对单元格的颜色没有做什么处理,新版本中单元格有加入FillColor和FontColor属性,但都还只能get,没有实现set,你试试。

@hughhan
@sssss
之前的版本确实存在问题,我在使用的过程中也发现了一些问题,新版中对发现的问题有做了修复,源码的话不能提供,抱歉了 :)


最新的Binary File这里下载

#28楼   回复  引用  查看    

2008-07-25 12:27 by dsr456      
好像单元格的border属性也不能设置啊

#29楼   回复  引用    

2008-08-13 23:21 by hpking[未注册用户]
web怎么用的?我从示例程序修改的代码怎么提示"System.Xml.XmlException: 缺少根元素。"

#30楼   回复  引用    

2009-03-11 15:43 by 兄弟[未注册用户]
楼主,请问能够预览和打印吗?最好就是在不打开Excel的基础上预览和打印

#31楼[楼主]   回复  引用  查看    

2009-03-12 09:27 by ppchen(陈荣林)      

@dsr456
Border已经可以设置了,Cell、Row、Col都加入了Style属性,此属性能设置Font、FontColor、Fill、FillColor、Border、BorderColor、NumberFormat

@hpking
Web上用法一样的,不清楚你提的那个错误的具体位置,你可以试试新版本。

@兄弟
这个类库只是生成Excel文件,打印和预览需要用Excel程序打开才能实现。


最新的Binary File(090312)这里下载

#32楼   回复  引用    

2009-05-06 10:58 by Erucy[未注册用户]
不知道能不能提供一个支持用Stream来构造ExcelPackage的版本?
Web端生成Excel的话,用FileInfo比较麻烦吧

#33楼   回复  引用  查看    

2009-05-07 11:13 by ︶ㄣ木べ头      
发现最新版里面new ExcelPackage的时候会报文件没有找到的错误呀!?

#34楼   回复  引用    

2009-05-07 22:14 by songmaoye
谢谢了

#35楼   回复  引用    

2009-05-08 12:51 by hzsqx[未注册用户]
数据格式如日期不能设置

#36楼[楼主]   回复  引用  查看    

2009-05-22 14:54 by ppchen(陈荣林)      
@Erucy
@songmaoye
以下是加入了新构造器的Lib
 Release_With_Stream_Ctor.rar

#37楼[楼主]   回复  引用  查看    

2009-05-22 14:58 by ppchen(陈荣林)      
@hzsqx
谢谢你提出问题,我会尽快抽时间测试修正的

#38楼   回复  引用    

2009-07-04 12:02 by qiutaitian[未注册用户]
非常感谢博主的这文章,让我解决了不少难题,但是我现在又遇上了更加难的问题,希望博能帮我看看.
1.单元格的设置:
a.单元格边框线的显示及颜色
b.单元格数据类型的设置,如:字体样式,大小,颜色
c.单元格背景颜色的填充
d.单元格的合并
2.在当前Sheet中根据数据动态生成统计图



发表评论

昵称: [登录] [注册]

主页:

邮箱:(仅博主可见)

评论内容:

  登录  注册

[使用Ctrl+Enter键快速提交评论]

0 1103710




相关文章:

相关链接: