Excel 文件处理模块(FastExcel实现)
简介
continew-starter-excel-fastexcel
是 ContiNew Starter 提供的基于 FastExcel 实现的 Excel 文件处理模块,提供开箱即用的 Excel 导入导出解决方案。FastExcel 是一个基于 Java 的快速、简洁、解决大文件内存溢出的 Excel 处理工具,专为大数据量 Excel 文件处理而设计。
主要特性
- 高性能处理: 基于 FastExcel 实现,支持大数据量 Excel 文件的高效处理,有效避免内存溢出
- 简洁易用: 提供简单易用的工具类
ExcelUtils
,一行代码即可完成 Excel 导出 - 智能转换: 内置多种数据类型转换器,支持大数值、枚举、集合等复杂数据类型的自动转换
- 样式优化: 自动适配列宽,提供良好的 Excel 文件显示效果
- 注解支持: 集成 Excel 注解,支持字段映射、排序、验证等功能
使用步骤
引入依赖
在 pom.xml
中添加以下依赖:
xml
<dependency>
<groupId>top.continew.starter</groupId>
<artifactId>continew-starter-excel-fastexcel</artifactId>
</dependency>
核心工具类
ExcelUtils
Excel 工具类,提供简洁的导出方法:
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);
数据类型转换器
ExcelBigNumberConverter
大数值转换器,解决 Excel 中超过 15 位数字的精度问题:
java
/**
* Excel 大数值转换器
* <p>
* Excel 中对长度超过 15 位的数值输入是有限制的,从 16 位开始无论录入什么数字均会变为 0,
* 因此输入时只能以文本的形式进行录入
* </p>
*/
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;
}
// 实现转换逻辑...
}
ExcelBaseEnumConverter
枚举转换器,支持 BaseEnum 接口的枚举类型:
java
/**
* Excel 枚举接口转换器
*/
public class ExcelBaseEnumConverter implements Converter<BaseEnum<?>> {
@Override
public Class<BaseEnum> supportJavaTypeKey() {
return BaseEnum.class;
}
@Override
public CellDataTypeEnum supportExcelTypeKey() {
return CellDataTypeEnum.STRING;
}
// 实现转换逻辑...
}
ExcelListConverter
集合转换器,支持 List 类型与逗号分隔字符串的转换:
java
/**
* Excel List 集合转换器
* <p>
* 仅适合 List<基本类型> <=> xxx,xxx 转换
* </p>
*/
@Component
public class ExcelListConverter implements Converter<List> {
@Override
public Class supportJavaTypeKey() {
return List.class;
}
@Override
public CellDataTypeEnum supportExcelTypeKey() {
return CellDataTypeEnum.STRING;
}
// 实现转换逻辑...
}
核心依赖
依赖 | 描述 |
---|---|
top.continew.starter:continew-starter-excel-core | Excel 文件处理模块 - 核心模块 |
cn.idev.excel:fastexcel | FastExcel(基于 Java 的快速、简洁、解决大文件内存溢出的 Excel 处理工具) |