Skip to content

FastExcel

简介

continew-starter-excel-fastexcel 是 ContiNew Starter 提供的基于 FastExcel 实现的 Excel 文件处理模块,提供开箱即用的 Excel 导入导出解决方案。

FastExcel (EasyExcel 替代版)是一个基于 Java 的快速、简洁、解决大文件内存溢出的 Excel 处理工具,专为大数据量 Excel 文件处理而设计。

主要特性

  • 高性能处理: 基于 FastExcel 实现,支持大数据量 Excel 文件的高效处理,有效避免内存溢出
  • 简洁易用: 提供简单易用的工具类 ExcelUtils,一行代码即可完成 Excel 导出
  • 智能转换: 内置多种数据类型转换器,支持大数值、枚举、集合等复杂数据类型的自动转换
  • 样式优化: 自动适配列宽,提供良好的 Excel 文件显示效果

快速开始

引入依赖

pom.xml
xml
<dependency>  <groupId>top.continew.starter</groupId>  <artifactId>continew-starter-excel-fastexcel</artifactId> </dependency>

ExcelUtils

ExcelUtils.java
java
public class ExcelUtils {    /**  * 导出(简单版本)  *  * @param list 导出数据集合  * @param fileName 文件名  * @param clazz 导出数据类型  * @param response 响应对象  */  public static <T> void export(List<T> list, String fileName, Class<T> clazz, HttpServletResponse response);    /**  * 导出(完整版本)  *  * @param list 导出数据集合  * @param fileName 文件名  * @param sheetName 工作表名称  * @param excludeColumnFieldNames 排除字段  * @param clazz 导出数据类型  * @param response 响应对象  */  public static <T> void export(List<T> list,  String fileName,  String sheetName,  Set<String> excludeColumnFieldNames,  Class<T> clazz,  HttpServletResponse response); }

ExcelUtils 默认使用 LongestMatchColumnWidthStyleStrategy 自动适配列宽:

java
FastExcelFactory.write(response.getOutputStream(), clazz)  .autoCloseStream(false)  // 自动适配宽度  .registerWriteHandler(new LongestMatchColumnWidthStyleStrategy())  // 自动转换大数值  .registerConverter(new ExcelBigNumberConverter())  .sheet(sheetName)  .excludeColumnFieldNames(excludeColumnFieldNames)  .doWrite(list);

数据类型转换器

大数值转换器

解决 Excel 中超过 15 位数字的精度问题:

ExcelBigNumberConverter.java
java
/**  * Excel 大数值转换器  * <p>  * Excel 中对长度超过 15 位的数值输入是有限制的,从 16 位开始无论录入什么数字均会变为 0,因此输入时只能以文本的形式进行录入  * </p>  *  * @author Charles7c  * @since 1.0.0  */ public class ExcelBigNumberConverter implements Converter<Long> {    /**  * Excel 输入数值长度限制  */  private static final int MAX_LENGTH = 15;    @Override  public Class<Long> supportJavaTypeKey() {  return Long.class;  }    @Override  public CellDataTypeEnum supportExcelTypeKey() {  return CellDataTypeEnum.STRING;  }    // 实现转换逻辑... }

集合转换器

支持 List 类型与逗号分隔字符串的转换:

ExcelListConverter.java
java
/**  * Excel List 集合转换器  *  * <p>  * 仅适合 List<基本类型> <=> xxx,xxx 转换  * </p>  *  * @author Charles7c  * @since 2.0.2  */ public class ExcelListConverter implements Converter<List> {    @Override  public Class supportJavaTypeKey() {  return List.class;  }    @Override  public CellDataTypeEnum supportExcelTypeKey() {  return CellDataTypeEnum.STRING;  }    // 实现转换逻辑... }

枚举转换器

支持 BaseEnum 接口的枚举类型:

ExcelBaseEnumConverter.java
java
/**  * Excel 枚举接口转换器  *  * @see BaseEnum  *  * @author Charles7c  * @since 1.2.0  */ public class ExcelBaseEnumConverter implements Converter<BaseEnum<?>> {    @Override  public Class<BaseEnum> supportJavaTypeKey() {  return BaseEnum.class;  }    @Override  public CellDataTypeEnum supportExcelTypeKey() {  return CellDataTypeEnum.STRING;  }    // 实现转换逻辑... }

核心依赖

依赖描述
top.continew.starter:continew-starter-excel-coreExcel 文件处理模块 - 核心模块
cn.idev.excel:fastexcelFastExcel(基于 Java 的快速、简洁、解决大文件内存溢出的 Excel 处理工具)