public static <T> List<T> getBeanList(InputStream inputStream, String[] cellKey, Class<T> class1, int startRowNum,
List<Integer> errorLines, String sheetName) throws Exception {
// 创建实体类对象容器
List<T> beanList = new ArrayList<T>();
// 读取excel文件
XSSFWorkbook xlsFile = new XSSFWorkbook(inputStream);
XSSFSheet sheet = null;
if (sheetName != null) {
sheet = xlsFile.getSheet(sheetName);
} else {
sheet = xlsFile.getSheetAt(0);
}
// 遍历excel文件
int rownums = sheet.getPhysicalNumberOfRows();
HashMap<String, Object> valueMap = new HashMap<String, Object>();
loop1: for (int i = startRowNum; i < rownums; i++) {
// 创建属性map
// Long lastTime = System.currentTimeMillis();
Row row = sheet.getRow(i);
if (row == null || isRowEmpty(row)) {
continue;
}
for (int j = 0; j < cellKey.length; j++) {
Cell cell = row.getCell(j, MissingCellPolicy.CREATE_NULL_AS_BLANK);
Object value = getCellValue(cell);
if ("".equals(value.toString())) {
errorLines.add(i + 1);
continue loop1;
}
valueMap.put(cellKey[j], value);
}
// System.out.println(System.currentTimeMillis()-lastTime);
T t = class1.newInstance();
// 使用BeanUtils将封装的属性注入对象
BeanUtils.populate(t, valueMap);
// 将对象添加至容器
beanList.add(t);
}
return beanList;
}
public static boolean isRowEmpty(Row row) {
for (int i = row.getFirstCellNum(); i < row.getLastCellNum(); i++) {
Cell cell = row.getCell(i);
if (cell != null && cell.getCellType() != Cell.CELL_TYPE_BLANK) {
return false;
}
}
return true;
}
private static Object getCellValue(Cell cell) {
Object value = null;
switch (cell.getCellTypeEnum()) {
case FORMULA:
value = cell.getStringCellValue();
break;
case STRING:
value = cell.getStringCellValue();
break;
case NUMERIC:
if (DateUtil.isCellDateFormatted(cell)) {
value = cell.getDateCellValue();
} else {
cell.setCellType(CellType.STRING);
value = cell.getStringCellValue();
}
break;
default:
value = "";
break;
}
return value;
}
导入Excel转pojo
最新推荐文章于 2024-06-22 14:02:01 发布
本文介绍了一种从Excel文件中读取数据并将其转换为Java Bean实例的方法。该方法利用了Apache POI库来解析Excel文件,并通过反射机制创建Java Bean对象。支持多种数据类型包括日期和公式单元格。
1528

被折叠的 条评论
为什么被折叠?



