List<PerformanceImportVO> performanceImportVOList = EasyPoiUtil.importExcel(file, 0, 1, 2, PerformanceImportVO.class);
excel 中一个单元格的内容填写的是正常的时间字符串,如 19:20:10, 被转成英文格式的日期,例如:Sun Dec 31 19:20:10 CST 1899.
原因,EasyPoiUtil处理时间类型的数据时,如果没有格式,将会使用系统默认的语言来进行格式化处理。
解决办法 :
package cn.healthlink.dw.common.code.util;
import cn.afterturn.easypoi.excel.annotation.Excel;
import cn.afterturn.easypoi.handler.inter.IExcelDataHandler;
import org.apache.poi.ss.usermodel.CreationHelper;
import org.apache.poi.ss.usermodel.Hyperlink;
import java.lang.reflect.Field;
import java.text.SimpleDateFormat;
import java.util.*;
public class CustomExcelDataHandler<T> implements IExcelDataHandler<T> {
private Class<T> clazz;
public CustomExcelDataHandler(Class<T> clazz) {
this.clazz = clazz;
}
@Override
public Object importHandler(T obj, String name, Object value) {
// 在导入时处理字段的值
// 根据需要进行处理逻辑
// 如果字段是日期类型,可以将其转换为字符串类型
if (value instanceof java.util.Date) {
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");
return sdf.format((Date) value);
}
return value;
}
@Override
public Object exportHandler(T obj, String name, Object value) {
return null;
}
@Override
public String[] getNeedHandlerFields() {
List<String> fields = new ArrayList<>();
Field[] declaredFields = clazz.getDeclaredFields();
for (Field field : declaredFields) {
if (field.isAnnotationPresent(Excel.class)) {
Excel excelAnnotation = field.getAnnotation(Excel.class);
String fieldName = excelAnnotation.name();
fields.add(fieldName);
}
}
return fields.toArray(new String[0]);
}
@Override
public void setNeedHandlerFields(String[] fields) {
// 设置需要处理的字段列表
// 根据需要进行配置
}
@Override
public void setMapValue(Map<String, Object> map, String originKey, Object value) {
}
@Override
public Hyperlink getHyperlink(CreationHelper creationHelper, T obj, String name, Object value) {
return null;
}
}