千家信息网

使用EasyPOI怎么实现动态生成列数

发表于:2024-09-26 作者:千家信息网编辑
千家信息网最后更新 2024年09月26日,使用EasyPOI怎么实现动态生成列数,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。准备 cn.afte
千家信息网最后更新 2024年09月26日使用EasyPOI怎么实现动态生成列数

使用EasyPOI怎么实现动态生成列数,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

准备


         cn.afterturn        easypoi-base        3.2.0                                                org.slf4j                        slf4j-api                                                        org.apache.commons                        commons-lang3                                                cn.afterturn                easypoi-annotation        3.2.0

四、详细步骤

定义表格样式

    /**     * 定义表格样式     *     * @param start 查询起始日期     * @param end   查询结束日期     * @return java.util.List     * @author huan     * @date 2019/6/21     * @since 2.8.2     */    private List setExportExcelStyle(DateTime start, DateTime end) {        //定义表格列名,该集合存放的就是表格的列明,每个对象就是表格中的一列        List modelList = new ArrayList();        //该对象就是定义列属性的对象        ExcelExportEntity excelentity = null;        //定义第一个列        excelentity = new ExcelExportEntity("企业全称", "companyName");        excelentity.setWidth(20);        excelentity.setHeight(10);        modelList.add(excelentity);        //定义第二个列        excelentity = new ExcelExportEntity("企业简称", "companyShortName");        excelentity.setWidth(20);        excelentity.setHeight(10);        modelList.add(excelentity);        //定义第三个列,这里指定了日期显示格式        excelentity = new ExcelExportEntity("认证日期", "openDate");        excelentity.setWidth(20);        excelentity.setHeight(10);        excelentity.setFormat("yyyy-MM-dd");        modelList.add(excelentity);        //定义第四个列,这边就是动态生成的,跟用用户选择的日期范围,动态生成列的数量        excelentity = new ExcelExportEntity(null, "recordDate");        //设置一个集合,存放动态生成的列        List modelListChild = new ArrayList();        start = DateUtils.getDateZeroTime(start);        while (start.isBefore(end)) {            String date = start.toString("yyyy-MM-dd");            modelListChild.add(new ExcelExportEntity(date, date, 15));            start = start.plusDays(1);        }        //日期按从小到大顺序排序,这里用了最简单的冒泡排序        for (int i = 0; i < modelListChild.size(); i++) {            for (int j = 0; j < modelListChild.size(); j++) {                String e1 = modelListChild.get(i).getKey().toString();                String e2 = modelListChild.get(j).getKey().toString();                if (e1.compareTo(e2) < 0) {                    ExcelExportEntity x1 = modelListChild.get(i);                    ExcelExportEntity x2 = modelListChild.get(j);                    modelListChild.set(j, x1);                    modelListChild.set(i, x2);                }            }        }        //将定义好的字列放到父列中        excelentity.setList(modelListChild);        modelList.add(excelentity);        //定义第五个列        excelentity = new ExcelExportEntity("应当使用天数", "shouldUseDay");        excelentity.setWidth(20);        excelentity.setHeight(10);        modelList.add(excelentity);        //定义第六个列        excelentity = new ExcelExportEntity("实际使用天数", "actualUseDay");        excelentity.setWidth(20);        excelentity.setHeight(10);        modelList.add(excelentity);        //定义第七个列        excelentity = new ExcelExportEntity("使用率", "rate");        excelentity.setWidth(20);        excelentity.setHeight(10);        modelList.add(excelentity);        //定义第八个列        excelentity = new ExcelExportEntity("推荐人", "commandMan");        excelentity.setWidth(20);        excelentity.setHeight(10);        modelList.add(excelentity);        //定义第九个列        excelentity = new ExcelExportEntity("拓客", "tk");        excelentity.setWidth(20);        excelentity.setHeight(10);        modelList.add(excelentity);        //定义第十个列        excelentity = new ExcelExportEntity("对接人", "connector");        excelentity.setWidth(20);        excelentity.setHeight(10);        modelList.add(excelentity);        return modelList;    }

定义表格数据

private List> getData(AnalyseStockQuery analyseStockQuery, boolean type) {        //获取数据源        ArrayList dtoList = listDetailDataWithNum(analyseStockQuery, type);        List> dataList = new ArrayList<>();        //存储没一行中的日期数据        List> dataListChild = null;        //存储表格中的每一行数据        Map mapParent = null;        //数据排序        dtoList.sort(new ExportComparator());        //定义表格数据        for (AnalyseStockExportDto dto : dtoList) {            mapParent = new HashMap(7);                               //这边只要和定义表格样式的时候 名称一致就行 我这边因为有三个字段不需要我这边后台生成,所以就没有设置默认值了            mapParent.put("companyName", dto.getCompanyName());            mapParent.put("companyShortName", dto.getCompanyShortName());            mapParent.put("openDate", dto.getOpenDate());            mapParent.put("shouldUseDay", dto.getShouldUseDay());            mapParent.put("actualUseDay", dto.getActualUseDay());            mapParent.put("rate", dto.getRate());            Map map = dto.getDateList();            dataListChild = new ArrayList<>();            dataListChild.add(map);            mapParent.put("recordDate", dataListChild);            dataList.add(mapParent);        }        return dataList;    }

主体方法

        /**     * 报表导出     *     * @param analyseStockQuery analyseStockQuery     * @param response          response     * @return javax.servlet.http.HttpServletResponse     * @author huan     * @date 2019/6/21     * @since 2.8.2     */    public HttpServletResponse exportStock(AnalyseStockQuery analyseStockQuery, HttpServletResponse response) {        try {            //设置默认查询日期            analyseStockQuery = setDefaultQueryDate(analyseStockQuery);            //参数校验            checkListDetailDataParam(analyseStockQuery);            //日期格式化            DateTime start = new DateTime().withDate(new LocalDate(analyseStockQuery.getQueryStartDate()));            DateTime end = new DateTime().withDate(new LocalDate(analyseStockQuery.getQueryLastDate()));            //定义表格样式            List modelList = setExportExcelStyle(start, end);            //定义表格名称            String fileName = URLEncoder.encode("客户库存使用统计表-" + start.toString("yyyy年MM月dd日") + "~" + end.toString("yyyy年MM月dd日"), "utf-8");            // Sheet1样式            ExportParams sheet1ExportParams = new ExportParams();            // 设置sheet得名称            sheet1ExportParams.setSheetName("入库统计");            // 创建sheet1使用得map            Map sheet1ExportMap = new HashMap<>();            // title的参数为ExportParams类型,目前仅仅在ExportParams中设置了sheetName            sheet1ExportMap.put("title", sheet1ExportParams);            //sheet1样式            sheet1ExportMap.put("entityList", modelList);            //sheet1中要填充得数据,true表示查询入库数据,false表示查询易签待入库数据            sheet1ExportMap.put("data", getData(analyseStockQuery, true));            //Sheet2设置            ExportParams sheet2ExportParams = new ExportParams();            sheet2ExportParams.setSheetName("易签待入库统计");            Map sheet2ExportMap = new HashMap<>();            sheet2ExportMap.put("title", sheet2ExportParams);            sheet2ExportMap.put("entityList", modelList);            sheet2ExportMap.put("data", getData(analyseStockQuery, false));            // 将sheet1、sheet2使用得map进行包装            List> sheetsList = new ArrayList<>();            sheetsList.add(sheet1ExportMap);            sheetsList.add(sheet2ExportMap);            // 执行方法            Workbook workBook = exportExcel(sheetsList, ExcelType.HSSF);            //设置response            response.setHeader("content-disposition", "attachment;filename=" + fileName + ".xls");            //设置编码格式            response.setCharacterEncoding("GBK");            //将表格内容写到输出流中并刷新缓存            @Cleanup ServletOutputStream out = response.getOutputStream();            workBook.write(out);            out.flush();            workBook.close();        } catch (FileNotFoundException e) {            log.debug("FileNotFoundException:{}", e.getMessage());        } catch (UnsupportedEncodingException e) {            log.debug("UnsupportedEncodingException:{}", e.getMessage());        } catch (IOException e) {            log.debug("IOException:{}", e.getMessage());        }        return response;    }

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注行业资讯频道,感谢您对的支持。

0