前言
随着互联网的流行,web项目逐渐占据主流。我相信大部分人开发项目的过程中都写过上传以及导出Excel和Word的功能,本文仅讨论导出Excel。
传统的使用Microsoft.Office.Interop 或者 Microsoft.ACE.OLEDB 都具有一些使用限制:
- 需要在服务器端装Excel或者Microsoft.ACE.OLEDB,且及时更新它,以防漏洞,还需要设定权限允许.NET访问COM+,如果在导出过程中出问题可能导致服务器宕机。
- Excel会把只包含数字的列进行类型转换,本来是文本型的,Excel会将其转成数值型的,比如编号000123会变成123。
- Excel会根据Excel文件前8行分析数据类型,如果正好你前8行某一列只是数字,那它会认为该列为数值型,自动将该列转变成类似1.42702E+17格式,日期列变成包含日期和数字的。
- 导出时,如果字段内容以“-”或“=”开头,Excel会把它当成公式进行,会报错。
C#中有很多第三方组件支持导出Excel,比如:NPOI、Aspose.Cells以及Spire.xls等等。它们能克服Microsoft.Office.Interop 或者 Microsoft.ACE.OLEDB的这些缺点。这里我们使用Aspose.Cells,同时使用已经写好的模板。
一、准备数据库
我创建了一个非常简单的表格,添加了一些数据。结构如图所示:
二、创建Excel模板
新建一个excel文件,第一行为标题,第二行添加内容。第二行格式为:&=[数据源表格名称].列名称。其中“数据源表格名称”为后台返回DataTable的名称,“列名称”为对应的标题列在数据库中的名称。具体如下:
三、后台写导出Excel的方法
具体代码如下:
然后在控制器中写个方法,调用ExportExcel。这个方法供前台js调用。
四、视图中调用
使用js调用控制器中的方法,要注意不能使用ajax。只能使用window.location.href。
五、实现效果
点击页面上的“导出”按钮,会弹出文件保存对话框。效果如下:
打开Excel,看看里面的内容:
数据库表中的数据,都填充在了Excel中。实现了我们想要的效果。
六、结语
本次分享到此结束。如果这篇文章对你有帮助的话,评论或推荐下吧!
项目源码:https://github.com/liuyang-1990/ExportDemo
作者:NaYoung
出处:http://www.cnblogs.com/liuyoung/p/7736811.html
欢迎转载,但任何转载必须保留完整文章,在显要地方显示署名以及原文链接。如您有任何疑问或者授权方面的协商,请给我留言