当前输的数据,使用的是List<Map<String,Object>> 来填充的数据,当我用Convert方法的时候无法在写入数据前,找到对应的列名,对象方式,可以从ExcelContentProperty contentProperty里面获取
但是Map方式好像没办法找到对应的列,我需要去 对指定列的时间类型,来指定数据格式,用对象的方式可以自定义,但是map的方式 有对应的方法么
mftmpeh81#
import com.alibaba.excel.context.AnalysisContext; import com.alibaba.excel.event.AnalysisEventListener; import com.alibaba.excel.metadata.ExcelContentProperty; import com.alibaba.excel.metadata.property.ExcelContentPropertyIndex; import com.alibaba.excel.util.StringUtils; import java.util.ArrayList; import java.util.List; import java.util.Map; public class CustomExcelListener extends AnalysisEventListener<Map<Integer, String>> { private List<String> errorMessages = new ArrayList<>(); @Override public void invoke(Map<Integer, String> rowData, AnalysisContext context) { // 获取列头信息 List<ExcelContentProperty> contentPropertyList = context.readWorkbookHolder().excelReadHeadProperty().getContentProperty(); for (Map.Entry<Integer, String> entry : rowData.entrySet()) { Integer columnIndex = entry.getKey(); String cellValue = entry.getValue(); // 获取列头信息 ExcelContentProperty contentProperty = getContentPropertyByColumnIndex(contentPropertyList, columnIndex); if (contentProperty != null) { // 获取列名 String columnName = contentProperty.getHead().getHeadNameList().get(0); // 判断是否是时间类型的列 if (isTimeColumn(columnName)) { // 在这里对时间类型的数据进行格式指定 // 比如:可以将字符串转换为时间类型,并指定格式 } } // 其他数据处理逻辑... } } @Override public void doAfterAllAnalysed(AnalysisContext context) { // 所有数据分析完成后,可以进行额外的处理 } @Override public void onException(Exception exception, AnalysisContext context) { // 异常处理 // 在这里可以获取到当前行的错误信息,并保存起来 // 这里的异常通常是指数据格式错误或类型错误等 } // 根据列索引获取列头信息 private ExcelContentProperty getContentPropertyByColumnIndex(List<ExcelContentProperty> contentPropertyList, Integer columnIndex) { for (ExcelContentProperty contentProperty : contentPropertyList) { ExcelContentPropertyIndex index = contentProperty.getHead().getIndex(); if (index.getColumnIndex() == columnIndex) { return contentProperty; } } return null; } // 判断是否是时间类型的列 private boolean isTimeColumn(String columnName) { // 在这里根据列名判断是否是时间类型的列 // 比如:判断列名中是否包含时间相关的关键字 // 如果是时间类型的列,返回true;否则返回false return columnName.contains("时间"); } // 获取所有错误信息 public List<String> getErrorMessages() { return errorMessages; } }
1条答案
按热度按时间mftmpeh81#