实际项目中使用poi导出excel(spring+springMVC+Mybatis环境下)

准备poi所依赖的jar包.

       放到工程的lib文件夹下.本文中项目所使用的jar包为:

  1. poi-3.15.jar,
  2. poi-ooxml-3.15.jar,
  3. poi-ooxml-schemas-3.15.jar
jar包下载地址:http://mvnrepository.com/search?q=comment

场景描述:

前台用easyui框架(这里博主用的是easyui框架,其他框架道理一样),选中一条数据,进行方案导出.效果截图如下:


首先是先获取选中方案的id(数据库中的),根据此id去数据库中查询方案下包含的具体的自定义媒体类型信息列表.用于封装成excel的基础数据,也就是要导出的内容.

利用poi导出excel大体思路:

1,需要导出的原始数据.即根据实际需求查询得到的结果集作为原始数据.可能是一个list,map...看你封装成什么样了(这里是封装成list了)

2,将原始的数据转换到excel中,具体根据数据形式不同,写法也会不同.不过这些都是大同小异的.

3,将生产好的excel文件写到一个路径下(这里都是放到tomcat服务器目录下的download下).

4,根据上一步的路径找到excel文件进行下载操作(就是文件下载...网上一大片)

下面看各个层的代码,以及excel工具类.具体步骤,代码中注释已经写到很明白了.

Controller层代码:

/**
     * 导出新闻方案
     * @param Integer[] newsScheme方案id数组
     * @throws Exception
     */
    @RequestMapping(value = "newsSchemes/export/{newsSchemesId}",method = RequestMethod.POST)
    public void exportNewsScheme(@PathVariable("newsSchemesId") Integer newsSchemesId) throws Exception{
        System.err.println("导出的方案的id:"+newsSchemesId);
        //切换到rsdb数据库
        DataSourceContextHolder.setDbType(DataSourceType.SOURCE_RSDB);
        //查询的结果集,list为需要在表格中展示的数据
        List<NewsMediaCategory> list = this.newsMediaCategoryService.listNewsMediaCateBySid(new NewsMediaCategory(newsSchemesId));
        //循环将自定义媒体对应的新闻源集合存入到list中.
        if(list != null && list.size()>0){
            for(int i=0;i<list.size();i++){
                //切换到rsdb数据库
                DataSourceContextHolder.setDbType(DataSourceType.SOURCE_RSDB);
                //获取site_id数组
                Integer[] sIds = this.newsMediaCategoryService.listSidsByNewsMediaCateId(list.get(i).getId());
                //切换到RSNews数据库
                DataSourceContextHolder.setDbType(DataSourceType.SOURCE_RSNEWS);
                List<Site> siteList = this.siteService.listBySids(new Site(sIds));
                //List<Site> site = this.siteMapper.listBySids(null)
                list.get(i).setSiteList(siteList);
                list.get(i).setSids(sIds);
            }
        }
        for(NewsMediaCategory nmc : list){
            System.err.println(nmc.getName()+"--------"+nmc.getSiteList().size());
        }
        //切换到rsdb数据库
        DataSourceContextHolder.setDbType(DataSourceType.SOURCE_RSDB);
        //根据方案id查询方案基本信息,主要是为了获取导出时候的默认名为(当前方案名+时间戳)
        NewsSchemes newsScheme = this.newsSchemesService.selNewsSchemesBySchemesId(newsSchemesId);
        //获取欲下载的文件路径
        String filePath =this.newsSchemesService.createNewSchemesExcel(newsScheme,list,this.request);
        //执行下载操作
        ExcelUtils.download(filePath , this.request , this.response);
    }
service层代码:

这里需要说明下:步骤大体是这么搞,但是样式需要根据不同需求来设定,其中的逻辑也会不一样的.此处导出的样式如下图:

代码如下:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值