基于easypoi的excel导出

近期做了一个报表导出的需求,想着easypoi的便捷性就记录一下。

easypoi文档为:http://easypoi.mydoc.io/

1.springboot+easypoi4.1.2

  <dependency>
            <groupId>cn.afterturn</groupId>
            <artifactId>easypoi-spring-boot-starter</artifactId>
            <version>4.1.2</version>
        </dependency>

2.主要代码块

 @Test
    public void test() {
        //数据库查询数据
        List<MocktoolTestTemplatePO> mocktoolTestTemplatePOList = mocktoolTestTemplateDAO.selectAll();
        if (CollectionUtils.isEmpty(mocktoolTestTemplatePOList)) {
            log.error("No data found from database");
        }
        //此处for为处理数据
        for (MocktoolTestTemplatePO mocktoolTestTemplatePO : mocktoolTestTemplatePOList) {
            byte[] templateData = mocktoolTestTemplatePO.getTemplateData();
            String templateDataStr = new String(templateData);
            Map deMap = null;
            try {
                deMap = JSON.parseObject(templateDataStr);
                mocktoolTestTemplatePO.setDeMap(deMap);
            } catch (Exception e) {
                log.error(e.toString());
                log.error("case_id->>" + mocktoolTestTemplatePO.getCaseId());
            }
        }

        testModelExportExcel(fileUrl, mocktoolTestTemplatePOList, "dev1_");
    }


public void testModelExportExcel(String fileUrl, List<MocktoolTestTemplatePO> mocktoolTestTemplatePOList, String storyNum) {
String url = "C:\\Users\\E091816\\Desktop\\Single_Message_Export_Template.xlsx";
        //POICacheManager.setFileLoader(new MyIFileLoader());
           //    导入事先准备的模板(模板采用表达式填充),指令参考                        
           //http://easypoi.mydoc.io/#category_49972
        TemplateExportParams params = new TemplateExportParams(url);
        List<Map<String, Object>> listMap = new ArrayList<>();
        for (MocktoolTestTemplatePO mocktoolTestTemplatePO : mocktoolTestTemplatePOList) {
            Map<String, Object> lm = new HashMap<String, Object>();
            lm.put("caseid", mocktoolTestTemplatePO.getCaseId());
            lm.put("tranType", mocktoolTestTemplatePO.getTranType());
            lm.put("msgType", mocktoolTestTemplatePO.getMsgType());
            lm.put("rulesGroupId", mocktoolTestTemplatePO.getRulesGroupId());
            lm.put("remarks", mocktoolTestTemplatePO.getRemarks());
            lm.put("deMap", mocktoolTestTemplatePO.getDeMap());
            listMap.add(lm);
        }
        Map map = new HashMap() {
   
   {
            put("maplist", listMap);
        }};

        try {
            Workbook workbook = ExcelExportUtil.exportExcel(params, map);


            if (Objects.isNull(workbook)) {
                log.error("workbook is null");
                return;
            }
            log.info("-------------");
            createFile(fileUrl, storyNum, workbook);
        } catch (Exception e) {
            log.error(e.toString());
        }
    }
 public void createFile(String fileUrl, String storyNum, Workbook workbook) {
        File savefile = new File(fileUrl);
        if (!savefile.exists()) {
            savefile.mkdirs();
        }
        FileOutputStream fos = null;
        try {
            fos = new FileOutputStream(fileUrl + storyNum + "testData.xls");
            workbook.write(fos);
            log.info("文件输出成功");
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                fos.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

3.我这里只是一个简单的demo,上一下模板和结果吧。

excel模板中表达式:

{
   
   {$fe: maplist t.caseid	t.correlation	 t.tranType	t.msgType	 t.rulesGroupId	t.remarks	t.deMap.DE1	t.deMap.DE2	t.deMap.DE3	t.deMap.DE4	t.deMap.DE5	t.deMap.DE6	t.deMap.DE7	t.deMap.DE8	t.deMap.DE9	t.deMap.DE10	t.deMap.DE11	t.deMap.DE12	t.deMap.DE13	t.deMap.DE14	t.deMap.DE15	t.deMap.DE16	t.deMap.DE17	t.deMap.DE18	t.deMap.DE19	t.deMap.DE20	t.deMap.DE21	t.deMap.DE22	t.deMap.DE23	t.deMap.DE24	t.deMap.DE25	t.deMap.DE26	t.deMap.DE27	t.deMap.DE28	t.deMap.DE29	t.deMap.DE30	t.deMap.DE31	t.deMap.DE32	t.deMap.DE33	t.deMap.DE34	t.deMap.DE35	t.deMap.DE36	t.deMap.DE37	t.deMap.DE38	t.deMap.DE39	t.deMap.DE40	t.deMap.DE41	t.deMap.DE42	t.deMap.DE43	t.deMap.DE44	t.deMap.DE45	t.deMap.DE46	t.deMap.DE47	t.deMap.DE48	t.deMap.DE49	t.deMap.DE50	t.deMap.DE51	t.deMap.DE52	t.deMap.DE53	t.deMap.DE54	t.deMap.DE55	t.deMap.DE56	t.deMap.DE57	t.deMap.DE58	t.deMap.DE59	t.deMap.DE60	t.deMap.DE61	t.deMap.DE62	t.deMap.DE63	t.deMap.DE64	t.deMap.DE65	t.deMap.DE66	t.deMap.DE67	t.deMap.DE68	t.deMap.DE69	t.deMap.DE70	t.deMap.DE71	t.deMap.DE72	t.deMap.DE73	t.deMap.DE74	t.deMap.DE75	t.deMap.DE76	t.deMap.DE77	t.deMap.DE78	t.deMap.DE79	t.deMap.DE80	t.deMap.DE81	t.deMap.DE82	t.deMap.DE83	t.deMap.DE84	t.deMap.DE85	t.deMap.DE86	t.deMap.DE87	t.deMap.DE88	t.deMap.DE89	t.deMap.DE90	t.deMap.DE91	t.deMap.DE92	t.deMap.DE93	t.deMap.DE94	t.deMap.DE95	t.deMap.DE96	t.deMap.DE97	t.deMap.DE98	t.deMap.DE99	t.deMap.DE100	t.deMap.DE101	t.deMap.DE102	t.deMap.DE103	t.deMap.DE104	t.deMap.DE105	t.deMap.DE106	t.deMap.DE107	t.deMap.DE108	t.deMap.DE109	t.deMap.DE110	t.deMap.DE111	t.deMap.DE112	t.deMap.DE113	t.deMap.DE114	t.deMap.DE115	t.deMap.DE116	t.deMap.DE117	t.deMap.DE118	t.deMap.DE119	t.deMap.DE120	t.deMap.DE121	t.deMap.DE122	t.deMap.DE123	t.deMap.DE124	t.deMap.DE125	t.deMap.DE126	t.deMap.DE127	t.deMap.DE128}}

注意:在excel中表达式不可用空格,通俗点讲cxcel的每一列必须有值(表达式)。

结果由于公司网络问题无法上传截图。

再次重申这是个demo,如果想要springmvc生成文件预览下载移步:http://easypoi.mydoc.io/#category_49975或者https://gitee.com/lemur/easypoi-test(这个是作者的test项目有大量demo参考)。

猜你喜欢

转载自blog.csdn.net/qq_41988225/article/details/103252159
今日推荐