超高分邀请大家一起来讨论和推荐“在ASP.NET程序中以高效、轻量方式生成格式丰富的Excel文件”方案! 推荐了可用的好方案者都有分。
在ASP.NET程序中可以使用COM编程来生成Excel文件,但是使用COM组件需要在服务端安装Excel程序和配置COM组件,而且还要强制杀死Excel进程,这样对系统的部署和性能都不够理想。所以希望大家推荐一下自己使用过的好的控件或者方案,要求如下:
1. 生成的Excel文件可以设置格式:
a. 必须支持字体大小、颜色、合并单元格等设置;
b. 最好能支持页边距、的设置;
c. 最好能支持Excel文件横向、纵向设置;
d. 最好能支持Excel模板文件的加载;
e. 但是不必支持图表的显示和绘制,也就是说Excel文件中只需要显示文字。
2. 服务端不用安装Excel程序;
3. 生成的excel文件在客户端打开的时候至少能兼容Excel2003,Excel XP,最好还能兼容Excel2000。
4. 性能比较好;
5. 最好是可用的开源控件或者是完整可用的源代码;退而求其次是功能不受限制的免费控件;再次是功能受限制的免费控件;最后是破解控件也行(当然,你需要告诉我们破解的方法和工具,我的邮箱:myprojects@126.com)。
我把目前我使用过的或者找到的方案罗列和总结一下(但这些方案都或多或少没有满足上面提到的要求),有说得不对的地方大家指正:
1.Excel的COM编程
优点:
能编程实现Excel文件的各种格式功能,还支持图表、模板等。
缺点:
a. 重量级方案,部署不方便,需要在服务端安装Excel程序和配置COM;
b. 需要强制杀死Excel进程;
c. 性能低下。
我的感觉:
在C/S中可以考虑使用此方案,在B/S中根本就不用考虑这个方案。
2. HTML导出
优点:
a. 轻量级方案,服务端不用安装Excel程序。
b. 实现简单、方便。
缺点:
a. 不支持Excel文件格式的设置。
我的感觉:
这个方案在网上有相当多的例子,比如gridview导出到excel就用此方法。
如果导出的是纯数据而不需要设置Excel文件的任何格式,那么此方案是可行的。但是,如果需要设置一定的格式,则此方案显然不行。
3. 生成XML然后转换成Excel方式
参考资源:http://www.codeproject.com/office/Excel_Export.asp?df=100&forumid=329437&fr=51
优点:
a. 服务端不用安装Excel程序。
b. 支持一定的Excel文件格式设置,比如字体大小、颜色、合并单元格等。
缺点:
a. 与Excel 2000不兼容:由于Excel 2000不支持XML,所以以这种方法生成的Excel文件可能在Excel2000中不兼容(毕竟目前还有不少用户的电脑装的是Excel 2000)。
b. 可能不支持Excel文件页边距的设置;不支持Excel文件横向、纵向的设置;不支持Excel模板;
c. 编程工作量比较大;
d. 生成的文件本质上是XML文件,需要“另存为xls”才能变成真正的Excel文件。
e. 性能是好是坏还不清楚,目前还没真正在项目中用过。希望有用过此方案的朋友能介绍一下这个方案的性能。
我的感觉:
如果生成的Excel文件不需要设置复杂的格式(也就是说只需要设置一些简单的格式),这个方案是可行的。
4. 以二进制的形式编程写Excel文件
这种方案涉及底层的东西,我们不用考虑。
5.付费控件
5.1 GemBox控件
http://www.gemboxsoftware.com/Index.asp
优点:
几乎满足前面提到的所有要求,除了有一个缺点以外。
缺点:
GemBox是付费控件,而且价格不便宜。
它同时提供免费版本的控件(http://www.gemboxsoftware.com/GBSpreadsheetFree.htm),但是功能受到严重限制:一个Excel文件最多只能生成5个WorkSheet,每个WorkSheet最多生成150行数据。
如果你有破解版本或者知道如何破解,希望你能共享(我的邮箱是myprojects@126.com)
我的感觉:
我已经在一个项目中使用这个免费版本的控件,感觉非常不错。如果生成的数据少于150条,那么使用这个控件非常合适,但是如果数据数量超过150条,那就只能放弃。
5.2 Aspose.Excel
和GemBox差不多,几乎满足前面提到的所有要求。就是付费软件。
我的感觉:
以前曾经有个朋友推荐我使用这个控件的破解版本。但是奇怪的是:用注册机在一台服务器上生成的注册码能用,但是在另一台服务器上用同样的方式破解就不行,后来就放弃使用这个控件,因为我担心的是这个破解控件在开发用服务器上能运行,不能确保部署到客户生产服务器上也会正常运行。可能是我破解不当,如果你有这方面的使用经验请慷慨介绍。
6. 开源控件或者功能不受限制的控件
目前还没找到合适的,希望大家尽情推荐。
------解决方案--------------------既然LZ把主流的解决方案都分析的这么到位了,那么按需选择就可以了.
个人感觉再不做投资的情况下,COM和XML还是比较好的方案,当然没有完美方案了~
------解决方案--------------------不错,加精~
------解决方案--------------------我还是用aspose.cell,这个控件算基本满足lz的需要了
------解决方案--------------------另外提供一个开源控件,poi.net
poi.net是一个开源的控件,主要是一个office操作类,由java项目转换过来。不过这个控件我一直没敢用,一是这个控件版本很低是个04年的项目,而是他直接使用j#翻译的,所以感觉不太可靠!而且,新版的office不一点支持
------解决方案--------------------NickLee.Common.ExcelLite
免费,服务器不需要装excel,支持多种格式,字体,和图片读写
最主要是比MS OWC快100倍左右
可以参考blog
www.cnblogs.com/mail-ricklee
------解决方案--------------------引用DotExcel.dll,
在生成事件中代码如下:
ExcelLib excelLib = new ExcelLib( myDataTable);
if( excelLib.Save(fileName))
{
HttpResponse Response = HttpContext.Current.Response;
//以下代码将文件写入客户端浏览器。
Response.Clear();
Response.ContentType = "application/vnd.ms-excel";
Response.AddHeader("Content-Disposition", "attachment; filename=" + fileName );
Response.WriteFile( excelLib.ExcelFileName );
Response.Flush();
Response.Close();
}