FastExcel
简介
continew-starter-excel-fastexcel 是 ContiNew Starter 提供的基于 FastExcel 实现的 Excel 文件处理模块,提供开箱即用的 Excel 导入导出解决方案。
FastExcel (EasyExcel 替代版)是一个基于 Java 的快速、简洁、解决大文件内存溢出的 Excel 处理工具,专为大数据量 Excel 文件处理而设计。
主要特性
- 高性能处理: 基于 FastExcel 实现,支持大数据量 Excel 文件的高效处理,有效避免内存溢出
- 简洁易用: 提供简单易用的工具类
ExcelUtils,一行代码即可完成 Excel 导出 - 智能转换: 内置多种数据类型转换器,支持大数值、枚举、集合等复杂数据类型的自动转换
- 样式优化: 自动适配列宽,提供良好的 Excel 文件显示效果
快速开始
引入依赖
xml
<dependency> <groupId>top.continew.starter</groupId> <artifactId>continew-starter-excel-fastexcel</artifactId> </dependency>ExcelUtils
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 位数字的精度问题:
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 类型与逗号分隔字符串的转换:
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 接口的枚举类型:
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-core | Excel 文件处理模块 - 核心模块 |
| cn.idev.excel:fastexcel | FastExcel(基于 Java 的快速、简洁、解决大文件内存溢出的 Excel 处理工具) |