莱莱 发表于 2023-5-19 18:05:46

使用EasyExcel实现通用导出功能

一、环境介绍


[*]JDK 1.8+
[*]EasyExcel 2.2.7
二、功能实现

此功能可以实现根据传入自定义的 导出实体类或Map 进行excel文件导出。若根据Map导出,导出列的顺序可以自定义。
话不多说,直接看代码
导出实体类

点击查看代码import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.format.DateTimeFormat;
import com.alibaba.excel.annotation.write.style.*;
import com.*.core.tool.utils.DateUtil;
import lombok.Data;
import org.apache.poi.ss.usermodel.BorderStyle;
import org.apache.poi.ss.usermodel.HorizontalAlignment;

import java.time.LocalDateTime;

/**
* excel导出对象实体类
*
* @author 热得快炸了
* @since 2023-4-3
*/
@Data
@HeadStyle(
        borderBottom = BorderStyle.THIN,
        borderLeft = BorderStyle.THIN,
        borderRight = BorderStyle.THIN,
        borderTop = BorderStyle.THIN
)
@ContentStyle(
        borderBottom = BorderStyle.THIN,
        borderLeft = BorderStyle.THIN,
        borderRight = BorderStyle.THIN,
        borderTop = BorderStyle.THIN,
        wrapped = true,
        horizontalAlignment = HorizontalAlignment.LEFT
)
@HeadFontStyle(fontHeightInPoints = (short) 16)
@ContentFontStyle(fontHeightInPoints = (short) 14)
public class ExportDataDTO {

        private static final long serialVersionUID = 1L;
        /**
       * 序号
       */
        @ColumnWidth(8)
        @ExcelProperty({"文件登记簿", "序号"})
        private Integer rowNum;
        /**
       * 标题
       */
        @ColumnWidth(50)
        @ExcelProperty({"文件登记簿", "姓名"})
        private String name;
        /**
       * 业务类型
       */
        @ColumnWidth(20)
        @ExcelProperty({"文件登记簿", "年龄"})
        private String age;
        /**
       * 业务类型
       */
        @ColumnWidth(18)
        @ExcelProperty({"文件登记簿", "性别"})
        private String gender;
}导出工具类

点击查看代码import com.alibaba.excel.EasyExcel;import com.alibaba.excel.ExcelWriter;import com.alibaba.excel.converters.integer.IntegerNumberConverter;import com.alibaba.excel.read.builder.ExcelReaderBuilder;import com.alibaba.excel.read.listener.ReadListener;import com.alibaba.excel.util.DateUtils;import com.alibaba.excel.write.builder.ExcelWriterBuilder;import com.alibaba.excel.write.handler.WriteHandler;import com.alibaba.excel.write.metadata.WriteSheet;import com.alibaba.excel.write.metadata.style.WriteCellStyle;import com.alibaba.excel.write.metadata.style.WriteFont;import com.alibaba.excel.write.style.HorizontalCellStyleStrategy;import com.baomidou.mybatisplus.core.metadata.IPage;import com.*.core.excel.converter.BaseDateConverter;import com.*.core.excel.listener.DataListener;import com.*.core.excel.listener.ImportListener;import com.*.core.excel.strategy.AdjustColumnWidthToFitStrategy;import com.*.core.excel.support.ExcelException;import com.*.core.excel.support.ExcelImporter;import com.*.core.mp.support.Query;import com.*.core.tool.utils.*;import lombok.SneakyThrows;import lombok.extern.slf4j.Slf4j;import org.apache.commons.codec.Charsets;import org.springframework.util.StringUtils;import org.springframework.web.multipart.MultipartFile;import javax.annotation.Nullable;import javax.servlet.http.HttpServletResponse;import javax.validation.constraints.NotNull;import java.io.*;import java.lang.reflect.Field;import java.net.URLEncoder;import java.util.*;import java.util.function.BiFunction;/** * Excel工具类 * * @author Chill * @apiNote https://www.yuque.com/easyexcel/doc/easyexcel */@Slf4jpublic class ExcelUtil {      /**       * 导出excel       *       * @param response响应类       * @param fileName文件名       * @param sheetName sheet名       * @param dataList数据列表       * @param clazz   class类       * @param      泛型       */        @SneakyThrows        public staticvoid export(HttpServletResponse response, String fileName, String sheetName, List dataList, Class clazz) {                response.setContentType("application/vnd.ms-excel");                response.setCharacterEncoding(Charsets.UTF_8.name());                fileName = URLEncoder.encode(fileName, Charsets.UTF_8.name());                response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xlsx");                EasyExcel.write(response.getOutputStream(), clazz).sheet(sheetName).doWrite(dataList);        }        /**       * 根据分页查询导出excel,根据exportClazz类导出       *       * @param dto          DTO(分页查询对象)       * @param resp         响应对象       * @param exportClazz需要导出的类       * @param fileName   文件名       * @param pageDataFunc 分页查询方法(须将字典值转为中文,可调用wrapper方法)       * @param strategyList 写入策略集合       * @param         DTO类       * @param         VO类       * @param         导出类       */        public staticvoid export(@NotNull D dto,                                          @NotNull HttpServletResponse resp,                                          @NotNull Class exportClazz,                                          @Nullable String fileName,                                          @NotNull BiFunction pageDataFunc,                                          @Nullable List
页: [1]
查看完整版本: 使用EasyExcel实现通用导出功能