在Java开发中,有时我们需要处理来自Excel文件的数据,例如导入用户信息、商品列表等。Apache POI 是一个流行的开源库,专门用于处理Microsoft Office格式的文件,包括Excel(.xls和.xlsx)。本教程将详细介绍如何使用Apache POI库将Excel数据解析为JavaBean对象。 我们有两个关键的Java类:`NewModel.java` 和 `ExcelHead.java`。`NewModel.java` 应该是定义了与Excel工作表列对应的JavaBean。这个类通常会包含多个私有属性,每个属性对应Excel表格的一列,以及对应的getter和setter方法。例如,如果Excel表格有“姓名”、“年龄”和“邮箱”三列,`NewModel` 类可能如下所示: ```java public class NewModel { private String name; private int age; private String email; // getters and setters... public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } } ``` `ExcelHead.java` 可能是用来存储Excel表格列名的类,这有助于映射Excel数据到JavaBean的属性。这个类可以定义一个枚举,每个枚举值对应Excel的一列。 ```java public enum ExcelHead { NAME("姓名"), AGE("年龄"), EMAIL("邮箱"); private String columnTitle; ExcelHead(String columnTitle) { this.columnTitle = columnTitle; } public String getColumnTitle() { return columnTitle; } } ``` 接下来,`ExeclUtils.java` 类是实现读取Excel并将其内容转换为JavaBean列表的关键。Apache POI 提供了 `XSSFWorkbook`(用于.xlsx)和 `HSSFWorkbook`(用于.xls)类来处理Excel文件。以下是一个基本的使用示例,展示了如何读取Excel文件并将其内容转换为`NewModel` 对象的列表: ```java import org.apache.poi.ss.usermodel.*; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.util.ArrayList; import java.util.List; public class ExcelUtils { public static List<NewModel> readExcelToBeanList(File file) throws IOException { List<NewModel> dataList = new ArrayList<>(); FileInputStream fis = new FileInputStream(file); Workbook workbook = new XSSFWorkbook(fis); // 如果是.xls文件,使用HSSFWorkbook Sheet sheet = workbook.getSheetAt(0); // 获取第一个工作表 Row headerRow = sheet.getRow(0); // 假设第一行是表头 int lastCellNum = headerRow.getLastCellNum(); for (int rowIndex = 1; rowIndex < sheet.getLastRowNum(); rowIndex++) { Row dataRow = sheet.getRow(rowIndex); if (dataRow == null) continue; NewModel model = new NewModel(); for (int cellIndex = 0; cellIndex < lastCellNum; cellIndex++) { Cell cell = dataRow.getCell(cellIndex); if (cell == null) continue; ExcelHead head = ExcelHead.values()[cellIndex]; switch (head) { case NAME: model.setName(cell.getStringCellValue()); break; case AGE: model.setAge((int) cell.getNumericCellValue()); break; case EMAIL: model.setEmail(cell.getStringCellValue()); break; } } dataList.add(model); } workbook.close(); fis.close(); return dataList; } } ``` 在上述代码中,我们首先创建一个`FileInputStream`以读取Excel文件,然后创建一个`Workbook`对象。我们获取第一个工作表,并假设第一行是表头,用于确定各列的含义。然后,我们遍历每一行数据,根据表头枚举值将单元格内容设置到相应的`NewModel`实例中,最后将这些实例添加到列表中。 注意,为了避免内存溢出,Apache POI 提供了流式处理(SXSSF)和迭代处理(HSSFSheet.forEachRow())的方式,特别是处理大数据量的Excel文件时,可以使用这些优化方法。 在实际项目中,可能还需要对异常进行适当的处理,例如文件不存在、格式错误等情况。此外,为了提高效率,可以考虑异步读取、分批处理数据,或者利用多线程来加速数据解析。通过这种方式,我们可以高效地将Excel数据转换为Java程序可以方便操作的对象,从而实现数据的导入、分析或其他业务逻辑。
- 1
- aierlan20082019-10-29很实用的代码MASK_Zhihui2019-10-31谢谢评论
- 粉丝: 2
- 资源: 1
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助