用NPOI给Excel单元格设置样式也可以用CSS啦

衣明志 发表于 , 阅读 (12244)

年底了,客户的项目也跟催命似得,其中一个需求是要根据数据分析生成一堆复杂样式的Excel报表。在服务器端生成报表,如果是用COM调用Excel软件生成xls文件是一个很差的想法:

  • 服务器上安装office,估计服务器维护人员会骂死你
  • ASP.NET通过COM调用Excel进行操作,会造成Excel进程无法关闭,平白无故浪费资源
  • 正版Excel是要购买的哦!

.NET上有不少第三方库可以生成Excel,但个人最喜欢NPOI.这个库其实是从JAVA的POI项目上搬过来的,API已经非常成熟。NPOI国内外的用户都挺多,文档资料也容易找。用NPOI生成xls文件,非常爽,可以用模板也可以从头开始写,性能和稳定性也都非常好,尤其2.0后的版本性能改进很大。但是我们的客户Excel样式实在是太花哨了,各种风格几乎不带重样的,同事仅为样式设定就差点在代码中崩溃,于是我决定让他们爽一下,给他们造个利器——可以象写CSS一样给单元格(Cell)设置各种样式和数据格式,减轻他们的负担提高工作效率,也提升代码可读性。于是经过一整夜的奋斗,打造出了第一个内部试用版,得到同事们的喜好,我很欣慰。

同事使用过程中,我发现了一些小的bug和问题,于是再次改进,并考虑兼容2.0.6,还有提供缩写csskey。经过几次对字体和样式数量限制的碰底和解决,终于觉得可以公开给大家使用了。至少让喜欢css的同学们,可以用相对熟悉和熟练的类似语法设置excel单元格样式。

基本用法就是:

1.首先引用NPOI.CSS的dll

2.在代码中引用NPOI.CSS命名空间

using NPOI.CSS;

3.对ICell对象使用CSS扩展方法设置样式

cell.CSS("color:red;font-weight:bold;font-size:11;font-name:宋体;border-type:thin;")

CSS方法返回的依然是ICell,所以大家可以用流式写法继续对该对象进行设置,或者常用于设置值。

由于采用了一点特殊手段,解决了一些样式管理的问题,所以目前仅支持.NET4的项目,还在用.NET2或者3.5的同学们对不住了 :(

项目源代码目前托管在GitHub上,相关细节大家可以移步去看一下 NPOI.CSS ,有任何问题可以在本文下面的评论中留言探讨,谢谢。

3 条评论
Richeir
Richeir 2014-01-20 18:18
NPOI感觉还是很方便的~ 之前项目需要输出Excel统计表(*.xls 97-2003格式),并且得有很多统计图,而且这些统计图必须是在Chart页(和Sheet页同级)里面。问了Tony Qu和其它NPOI群里面的人,都表示NPOI暂时做不到..所以只能硬着头皮去用COM了 2.0的版本貌似支持Chart的操作,不过好像也只是支持*.xlsx的格式... 还是希望NPOI能够功能越来越完善,早日让大伙脱离COM的诅咒
HW
HW 2016-01-18 20:29
我用的版本NPOI2.2。引用NPOI.CSS.dll是后报:未能加载文件或程序集“NPOI, Version=2.0.6.0, Culture=neutral, PublicKeyToken=0df73ec7942b34e1”或它的某一个依赖项。找到的程序集。
衣明志
衣明志 2016-02-01 09:54
@HW 我会更新版本,将对2.0.6的依赖改为新版本。谢谢反馈