java中Excel导出前端查询数据

1、pom.xml引入jar包

  <!--Excel封装-->
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml</artifactId>
            <version>3.17</version>
        </dependency>
        <dependency>
            <groupId>xerces</groupId>
            <artifactId>xercesImpl</artifactId>
            <version>2.11.0</version>
        </dependency>
        <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
            <version>4.5.11</version>
        </dependency>

2、Controller中添加export方法

 /**
         * 导出excel
         * @param param
         * @throws Exception
         */

        @RequestMapping(value = "/export",method = RequestMethod.GET)
        @ResponseBody
        public void export( WsPurchase param, HttpServletResponse response){
                List<WsPurchase> list = wsPurchaseService.findAll(param);
                ExcelWriter writer = ExcelUtil.getWriter();
             //   Map<String, Object> row = new LinkedHashMap<>();
                List<Map<String, Object>> rows = new ArrayList<>();
                for (int i=0;i<list.size();i++) {
                    WsPurchase a = list.get(i);
                    Map<String, Object> row = new HashMap<>();
                    row.put("进货日期", a.getCredate());
                    row.put("供应商ID", a.getSupplyid());
                    row.put("供应商", a.getSupplyname());
                    row.put("业务类型", a.getOperationtype());
                    row.put("货品ID", a.getGoodsid());
                    row.put("货品名称", a.getGoodsname());
                    row.put("商品名", a.getCurrencyname());
                    row.put("规格", a.getGoodstype());
                    row.put("单位", a.getGoodsunit());
                    row.put("生产厂家", a.getFactoryname());
                    row.put("产地", a.getProdarea());
                    row.put("批号", a.getLotno());
                    row.put("数量", a.getGoodsqty());
                    row.put("单价", a.getUnitprice());
                    row.put("金额", a.getTotalLine());
                    row.put("有效期", a.getInvaliddate());
                    rows.add(row);
                }
                    writer.addHeaderAlias("credate", "进货日期");
                    writer.addHeaderAlias("supplyid", "供应商ID");
                    writer.addHeaderAlias("supplyname", "供应商");
                    writer.addHeaderAlias("operationtype", "业务类型");
                    writer.addHeaderAlias("goodsid", "货品ID");
                    writer.addHeaderAlias("goodsname", "货品名称");
                    writer.addHeaderAlias("currencyname", "商品名");
                    writer.addHeaderAlias("goodstype", "规格");
                    writer.addHeaderAlias("goodsunit", "单位");
                    writer.addHeaderAlias("factoryname", "生产厂家");
                    writer.addHeaderAlias("prodarea", "产地");
                    writer.addHeaderAlias("lotno", "批号");
                    writer.addHeaderAlias("goodsqty", "数量");
                    writer.addHeaderAlias("unitprice", "单价");
                    writer.addHeaderAlias("totalLine", "金额");
                    writer.addHeaderAlias("invaliddate", "有效期");
              //  List<Map<String, Object>> rows = CollUtil.newArrayList(row);
                   writer.write(rows,true);

                    response.setContentType("application/vnd.ms-excel;charset=utf-8");
                    String filename = Convert.toStr(System.currentTimeMillis())+".xls";
                    response.setHeader("Content-Disposition","attachment="+filename);

                try {
                    ServletOutputStream out = response.getOutputStream();
                    writer.flush(out,true);
                    writer.close();
                    IoUtil.close(out);
                } catch (IOException e) {
                    log.error(e.getMessage());
                    e.printStackTrace();

                }
            }

3、dao和service添加查询数据库方法

dao中代码

 List<WsPurchase> findAll(WsPurchase param);

service中代码

 public List<WsStorage> findAll(WsStorage param){
        return  dao.findAll(param);
    }

4、HTML中关联查询条件

前端请求后台参数
function excel(){
        var startTime=$("#startTime").val();
        var endTime=$("#endTime").val();
        var supplyid=$("#supplyid").val();
        var supplyname=$("#supplyname").val();
        var goodsid=$("#goodsid").val();
        var goodsname=$("#goodsname").val();
        var currencyname=$("#currencyname").val();
        var lotno=$("#lotno").val();
        window.location.href="purchase/export?startTime="+startTime+"&endTime="+endTime+"&supplyid="+supplyid+
            "&supplyname="+supplyname+"&goodsid="+goodsid+"&goodsname="+goodsname+"&currencyname="+currencyname+
            "&lotno="+lotno
    }
    
导出按钮
<td>  <a href="javascript:;" class="easyui-linkbutton" onclick="excel();"> 
导出Excel</a> 
</td>

5、Xml数据库查询语句

<!-- 查询列表 -->
  <select id="findAll" resultMap="BaseResultMap" parameterType="Map">
    select
    CREDATE, SUPPLYID, SUPPLYNAME,
    OPERATIONTYPE, GOODSID, GOODSNAME,
    CURRENCYNAME, GOODSTYPE, GOODSUNIT,
    FACTORYNAME, PRODAREA, GOODSQTY,
    LOTNO, INVALIDDATE, UNITPRICE,
    TOTAL_LINE
    from WS_PURCHASE_V a
    <include refid="Example_Where_Clause" />
  </select>

excel生成参考文档 Excel生成-ExcelWriter

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java导出大量数据Excel时,可能会因为数据量过大导致前端请求超时。这是由于以下几个原因引起的: 1. 数据量大:导出大量数据需要较长的处理时间和较高的系统资源消耗。如果数据量远远超过前端请求能承受的极限,前端请求时间可能超出设置的时间限制,从而导致超时。 2. 网络传输限制:在数据量较大的情况下,数据的传输时间也会相应增加。如果网络传输速度慢或网络连接不稳定,请求可能会在传输过程超时。 为了解决这个问题,可以考虑以下几个方案: 1. 分批导出:将大量数据分成小批次进行导出。可以在前端通过多次请求来获取分批次的数据,然后在后台进行数据导出。这样可以避免单次请求时间过长导致的超时问题。 2. 后台异步导出:当前端发起数据导出请求时,后台可以先返回一个任务标识,告知前端任务已经在后台进行处理。后台将数据导出的过程放在一个异步任务执行,不会阻塞前端请求。前端可以轮询任务状态,直到任务完成并提供下载链接。 3. 压缩文件导出:将导出数据以压缩文件的形式返回给前端,可以减小数据的传输量,加快数据传输速度。前端可以在接收到文件后再进行解压和处理。 4. 前端分页获取:前端可以通过分页的方式获取数据,每次请求只获取一页的数据。这样可以减少单次请求的数据量,降低请求超时的风险。 通过上述方案,可以有效地解决Java导出Excel数据量大导致前端请求超时的问题,提高系统的可用性和用户体验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值