easyExcel 按照模板设置导出excel内容

1.引入

 <!--easyexcel -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>easyexcel</artifactId>
            <version>3.3.1</version>
        </dependency>
        <dependency>
            <groupId>com.github.whvcse</groupId>
            <artifactId>easy-captcha</artifactId>
            <version>1.6.2</version>
        </dependency>

2.设置模板  打印模板.xlsx

3.相关代码

    @ApiOperation(value = "获取excle,根据excle模板")
    @GetMapping("getExcel")
    public void getExcel(HttpServletResponse response) throws IOException {
    	response.setContentType("application/vnd.ms-excel");
        response.setCharacterEncoding("UTF-8");
        response.setHeader("Content-disposition", "attachment;filename=" +  DateUtil.currentTimeSeconds() + ".xlsx");
    	//指定excel模板文件
//        String templateFileName = "C:\\Users\\13628\\Desktop\\打印模板.xlsx";
        ResourceLoader resourceLoader = new DefaultResourceLoader();
        InputStream templateFileInputStream = resourceLoader.getClassLoader().getResourceAsStream("打印模板.xlsx");
        //指定填充后保存excel的文件
//        String fileName = "C:\\Users\\13628\\Desktop\\demo.xlsx";
        //数据
        Map<String, Object> map = new HashMap<String, Object>();
        map.put("payTime", "2023-08-09");
        List<Map<String, Object>> list = new ArrayList<Map<String,Object>>();
        for (int i = 0; i < 5; i++) {
        	Map<String, Object> map1 = new HashMap<String, Object>();
        	map1.put("gname", "测试"+i);
        	map1.put("price", 2.38+i);
        	map1.put("relPrice", 3.38+i);
        	list.add(map1);
        }
        map.put("records", list);
        //导出
        ByteArrayOutputStream out = new ByteArrayOutputStream();
        try (ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream()).withTemplate(templateFileInputStream).build()){
            WriteSheet writeSheet = EasyExcel.writerSheet().build();
            // 这里注意 入参用了forceNewRow 代表在写入list的时候不管list下面有没有空行 都会创建一行,然后下面的数据往后移动。默认 是false,会直接使用下一行,如果没有则创建。
            // forceNewRow 如果设置了true,有个缺点 就是他会把所有的数据都放到内存了,所以慎用
            // 简单的说 如果你的模板有list,且list不是最后一行,下面还有数据需要填充 就必须设置 
            //forceNewRow=true 但是这个就会把所有数据放到内存 会很耗内存
            // 如果数据量大 list不是最后一行 参照下一个
            FillConfig fillConfig =                 
            FillConfig.builder().forceNewRow(Boolean.TRUE).build();
            excelWriter.fill(map, writeSheet);
            excelWriter.fill(new FillWrapper("records", list), fillConfig, writeSheet);
        }

    }

4.apifox调试,返回文件流,点击下载即可下载文件

下载后文件

猜你喜欢

转载自blog.csdn.net/qq_32784303/article/details/133749430