使用EasyExcel实现通用导出功能

莱莱  金牌会员 | 2023-5-19 18:05:46 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 888|帖子 888|积分 2664

一、环境介绍


  • JDK 1.8+
  • EasyExcel 2.2.7
二、功能实现

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

点击查看代码
  1. import com.alibaba.excel.annotation.ExcelProperty;
  2. import com.alibaba.excel.annotation.format.DateTimeFormat;
  3. import com.alibaba.excel.annotation.write.style.*;
  4. import com.*.core.tool.utils.DateUtil;
  5. import lombok.Data;
  6. import org.apache.poi.ss.usermodel.BorderStyle;
  7. import org.apache.poi.ss.usermodel.HorizontalAlignment;
  8. import java.time.LocalDateTime;
  9. /**
  10. * excel导出对象实体类
  11. *
  12. * @author 热得快炸了
  13. * @since 2023-4-3
  14. */
  15. @Data
  16. @HeadStyle(
  17.         borderBottom = BorderStyle.THIN,
  18.         borderLeft = BorderStyle.THIN,
  19.         borderRight = BorderStyle.THIN,
  20.         borderTop = BorderStyle.THIN
  21. )
  22. @ContentStyle(
  23.         borderBottom = BorderStyle.THIN,
  24.         borderLeft = BorderStyle.THIN,
  25.         borderRight = BorderStyle.THIN,
  26.         borderTop = BorderStyle.THIN,
  27.         wrapped = true,
  28.         horizontalAlignment = HorizontalAlignment.LEFT
  29. )
  30. @HeadFontStyle(fontHeightInPoints = (short) 16)
  31. @ContentFontStyle(fontHeightInPoints = (short) 14)
  32. public class ExportDataDTO {
  33.         private static final long serialVersionUID = 1L;
  34.         /**
  35.          * 序号
  36.          */
  37.         @ColumnWidth(8)
  38.         @ExcelProperty({"文件登记簿", "序号"})
  39.         private Integer rowNum;
  40.         /**
  41.          * 标题
  42.          */
  43.         @ColumnWidth(50)
  44.         @ExcelProperty({"文件登记簿", "姓名"})
  45.         private String name;
  46.         /**
  47.          * 业务类型
  48.          */
  49.         @ColumnWidth(20)
  50.         @ExcelProperty({"文件登记簿", "年龄"})
  51.         private String age;
  52.         /**
  53.          * 业务类型
  54.          */
  55.         @ColumnWidth(18)
  56.         @ExcelProperty({"文件登记簿", "性别"})
  57.         private String gender;
  58. }
复制代码
导出工具类

点击查看代码[code]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 static  void 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 static  void export(@NotNull D dto,                                            @NotNull HttpServletResponse resp,                                            @NotNull Class exportClazz,                                            @Nullable String fileName,                                            @NotNull BiFunction pageDataFunc,                                            @Nullable List
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

莱莱

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表