关闭

Easyui+Spring Mvc导出Excel:支持按模板样式导出、合并表头、合并单元格、多sheet

标签: SpringMVC导出ExcelJava导出Excel
9922人阅读 评论(20) 收藏 举报
分类:

转自:http://bbs.jeasyuicn.com/thread-328-1-1.html


群上常有人在问datagrid怎么导出到excel。其实导出可以分两种,一种是直接将页面的数据导出(即前台导出),一种是点击“导出”后再次请求后台,然后封装数据进行导出(即后台导出)。前台导出虽然可以不用再次请求数据,但其不足也是明显,如分页表格就无法用前台导出了。个人还是觉得后台导出实在。

        这个导出的Demo主要是跟大家分享我对poi的excel导出的操作进行封装的一套工具,目前这套工具支持按模板样式导出,支持合并表头、合并单元格、多sheet导出,支持小计功能(包括max、min、sum、avg、count),导出列宽按数据自适应。导出的数据支持List<Object[]>、List<Map>和List<JavaBean>,相信大多数返回的表格数据也是这几种类型了~
       工具使用比较简单,只需要写几行代码,就可以实现到导出功能,不用你再去关心poi的类和方法,不用再去拼得跟头牛一样了:
        1、response.setContentType("application/msexcel;charset=GBK");//设置导出为excel,并设置字符集为GBK编码
        2、查询数据,返回List<Object[]>、List<Map>或List<JavaBean>
        3、创建表头对象TableHeaderMetaData :
                String[] hearders = new String[] {"列1", "列2", ...,"列n",};
                TableHeaderMetaData headerMeta= ExcelUtils.createTableHeader(hearders);//ExcelUtils是封装好的工具类,直接调用createTableHeader即可
        4、如果是List<JavaBean>或List<Map>数据集,则需要定义个属性数组:
                String[] fields = new String[] {"code", "name", "sex", "blood", "addr"};//属性数组,写数据到excel时的顺序定位
        5、封装表格数据为:
                TableData td = ExcelUtils.createTableData(list, headerMeta,fields);//如果list是List<Object[]>数据集,fields为null即可
        6、导出:
               JsGridReportBase report = new JsGridReportBase(request, response);//导出工具类
               report.exportToExcel(title, "admin", td);//将TableData数据对象导出到excel
        OK了,导出的过程完毕。可以看到,需要写的也就那么几行代码,而且根本不需要你知道POI是个啥玩意,这些都已经封装到工具类的方法里面去了。
        这里要特别要注意:需要在JsGridReportBase工具类指定模板excel的路径private static String MODULE_PATH = "../../demo/module.xls";//模板路径

        源码下载地址:http://pan.baidu.com/s/1geVLgOF

       在线演示地址:http://eed.jeasyuicn.com/
          导出图片示例:
   
 
 
问题修复(demo未重新部署):
1、导出数据类型为Date或TimeSta mp报错问题修复
2、多表头动态列宽报错问题修复
优化:
1、列宽自适应:如导出列数据宽度大于列标题宽度,则按照数据宽度自适应列;如导出列数据宽度小于列标题宽度,则按列标题宽度自适应列。

2012-12-26更新:
1、支持单元格合并导出
2、支持小计功能。不同数据列可根据指定分组列进行小计,小计方式包括:max、min、avg、sum、count(分组记录数)

另代码已共享到 jquery easyui超级群,大家也可以到群上下~
2
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:246281次
    • 积分:3048
    • 等级:
    • 排名:第11437名
    • 原创:41篇
    • 转载:131篇
    • 译文:2篇
    • 评论:39条