java用easyexcel导出excel(可自定义导出字段) 您所在的位置:网站首页 easyexcel模板导出数据 java用easyexcel导出excel(可自定义导出字段)

java用easyexcel导出excel(可自定义导出字段)

2023-04-02 05:52| 来源: 网络整理| 查看: 265

java用easyexcel导出excel(可自定义导出字段) 以下说明针对有自定义导出字段数据的需求,不用自定义导出字段的可以忽略导出excel的工具类,仅需要工具类中第一个方法的在最后一截导出即可。

首先导入坐标

com.alibaba easyexcel 3.0.5

自定义导出字段由前端传入,需传入字段和字段名,如果不需要自定义导出字段这一步可以省略直接在返回实体中加上对应字段导出的注解即可 在这里插入图片描述 然后collector层编写

@PostMapping("/download") @ApiOperation(value = "导出") public void exportColumn(HttpServletRequest request,HttpServletResponse response,@RequestBody DzrStockDTO stockDTO){ request.getSession(); dzrStockService.exportColumn(response,stockDTO); }

业务层编写

@Override public void exportColumn(HttpServletResponse response, DzrStockDTO stockDTO) { Assert.isTrue(CollectionUtils.isNotEmpty(stockDTO.getHeadList()) && CollectionUtils.isNotEmpty(stockDTO.getColumnList()),"导出字段和名称不能为空!"); stockDTO.setPageNum(1); stockDTO.setPageSize(60000); //导出的数据 List list = (List) getList(stockDTO).getRows(); String name = "导出excel名称"; LeadingOutUtil.upload(response,stockDTO.getHeadList(),stockDTO.getColumnList(),list,name); }

由于有多个导出,所以吧导出的方法提取出来为一个公共的工具,具体如下,可以直接使用,自行修改参数即可

package com.sydata.fmimp.entity.util; import com.alibaba.excel.EasyExcel; import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy; import lombok.extern.slf4j.Slf4j; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.lang.reflect.Method; import java.net.URLEncoder; import java.util.ArrayList; import java.util.List; /** * @Author xx * @Date 2023/3/14 14:23 * @Description: 选字段导出工具类 * @Version 1.0 */ @Slf4j public class LeadingOutUtil { /** * 选择字段导出数据 * @param response * @param headList 文件导出字段名称 * @param columnList 文件导出字段 * @param list 导出数据 * @param name 文件名 */ public static void upload(HttpServletResponse response,List headList,List columnList, List list, String name) { try { response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); response.setCharacterEncoding("utf-8"); String fileName = URLEncoder.encode(name, "UTF-8"); response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx"); EasyExcel.write(response.getOutputStream()) .head(head(headList)) //自适应列宽 .registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()) .includeColumnFiledNames(columnList) .sheet(name) .doWrite(dataList(list,columnList)); } catch (IOException e) { e.printStackTrace(); log.error(e.getMessage(),e); } } /** * 设置Excel头 * @param headList Excel头信息 * @return */ public static List head(List headList) { List list = new ArrayList(); for (String value : headList) { List head = new ArrayList(); head.add(value); list.add(head); } return list; } /** * 设置表格信息 * @param dataList 查询出的数据 * @param fileList 需要显示的字段 * @return */ public static List dataList(List dataList, List fileList) { List list = new ArrayList(); for (Object object : dataList) { List data = new ArrayList(); for (String fieldName : fileList) { //通过反射根据需要显示的字段,获取对应的属性值 data.add(getFieldValue(fieldName, object)); } list.add(data); } return list; } /** * 根据传入的字段获取对应的get方法,如name,对应的getName方法 * @param fieldName 字段名 * @param object 对象 * @return */ private static Object getFieldValue(String fieldName, Object object) { try { String firstLetter = fieldName.substring(0, 1).toUpperCase(); String getter = "get" + firstLetter + fieldName.substring(1); Method method = object.getClass().getMethod(getter); return method.invoke(object); } catch (Exception e) { return null; } } }

说明

EasyExcel.write(response.getOutputStream()) .head(head(headList)) //自适应列宽 .registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()) .includeColumnFiledNames(columnList) .sheet(name) .doWrite(dataList(list,columnList));

headList:为excel的表头字段,不需要自定义导出字段的可以直接在实体类中接入导出字段的注解,然后把实体类替换即可 注解类 在这里插入图片描述 name:导出sheet页的名称 list:需要导出的数据



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有