非常好 ✅
如果你想在 Excel 读取阶段就去掉换行 (即数据在进入 Java 实体类或 Map 之前就被清洗),
可以通过 EasyPOI 的自定义数据处理器 IExcelDataHandler
来实现。
🚀 实现思路
IExcelDataHandler
是 EasyPOI 提供的一个接口,
允许你在每个单元格被解析时,对值进行二次处理。
你可以拦截所有字符串字段,去掉换行、回车和多余空格。
✅ 实现步骤
第 1 步:定义自定义处理器
java
import cn.afterturn.easypoi.handler.inter.IExcelDataHandler;
public class CleanLineBreakHandler implements IExcelDataHandler<Object> {
@Override
public Object importHandler(Object obj, String name, Object value) {
if (value instanceof String) {
// 去掉所有换行符、回车符,并去除首尾空格
String cleaned = ((String) value)
.replaceAll("[\\r\\n]+", " ") // 将换行符替换为空格
.replaceAll("\\s+", " ") // 多个空格合并为一个
.trim();
return cleaned;
}
return value;
}
@Override
public String[] getNeedHandlerFields() {
// null 表示处理所有字段
return null;
}
}
💡 说明:
如果只想处理部分字段,可以返回字段名数组:
javareturn new String[]{"name", "remark"};
返回
null
表示处理所有列。
第 2 步:在导入时设置该处理器
java
ImportParams params = new ImportParams();
params.setDataHandler(new CleanLineBreakHandler());
List<MyExcelVO> dataList = ExcelImportUtil.importExcel(
file.getInputStream(),
MyExcelVO.class,
params
);
💡 此时,所有字符串字段在导入时就会自动清除换行符,不需要再手动遍历清洗。
第 3 步(可选):Map 模式导入同样适用
java
ImportParams params = new ImportParams();
params.setDataHandler(new CleanLineBreakHandler());
List<Map<String, Object>> dataList = ExcelImportUtil.importExcel(
file.getInputStream(),
Map.class,
params
);
✅ 效果演示
Excel 原始值 | 处理后结果 |
---|---|
"张三\n李四" | "张三 李四" |
"地址\r\n深圳市南山区" | "地址 深圳市南山区" |
" 多个 空格 " | "多个 空格" |
是否希望我帮你再加上一个完整的 Spring Boot Controller 示例(上传 Excel → 自动去换行 → 返回 JSON)?
可以直接复制运行。