基於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參考)。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章