Java POI实现兼容2003和2007 Excel读写

需积分: 15 1 下载量 102 浏览量 更新于2024-09-07 收藏 7KB TXT 举报
"在Java编程中,处理Excel文件(尤其是与2003年和2007年版本兼容)是一项常见的任务。Apache POI库是实现这一功能的关键工具,它提供了一套API来读取和操作Microsoft Excel的两种主要格式:HSSF(针对Excel 2003,使用xls文件扩展名)和XSSF(Excel 2007及以上版本,使用xlsx文件扩展名)。以下代码片段展示了如何使用JavaPOI库来读取Excel文件并将其数据转换为可操作的对象列表,以适应这两种不同的格式。 首先,引入必要的Apache POI依赖项,包括`hssf`和`xssf`模块。如果文件是xls格式,我们使用`HSSFWorkbook`类,而如果是xlsx格式,则使用`XSSFWorkbook`。这里有一个名为`ReadExcel`的公共静态方法,用于处理文件读取: ```java public static List<List<Object>> readExcel(File file) throws IOException { String fileName = file.getName(); String extension = fileName.lastIndexOf(".") == -1 ? "" : fileName.substring(fileName.lastIndexOf(".") + 1); if ("xls".equals(extension)) { // 检查是否为xls文件 HSSFWorkbook workbook = new HSSFWorkbook(new FileInputStream(file)); List<List<Object>> dataList = readWorkbook(workbook, HSSFRow.class, HSSFCell.class); workbook.close(); // 关闭工作簿以释放资源 } else if ("xlsx".equals(extension)) { // 如果是xlsx文件 XSSFWorkbook workbook = new XSSFWorkbook(new FileInputStream(file)); dataList = readWorkbook(workbook, XSSFRow.class, XSSFCell.class); workbook.close(); } else { throw new IllegalArgumentException("Unsupported file format: " + extension); } return dataList; } private static List<List<Object>> readWorkbook(HSSFWorkbook workbook, Class<? extends HSSFSheet> sheetClass, Class<? extends HSSFRow> rowClass) { // 实现读取工作表、行和单元格的方法 // ... // 这里可能包括遍历工作簿中的所有工作表,获取每一行的数据,将数据转换为对象列表,并将这些列表放入主列表中 // 使用HSSFRow和HSSFCell(对于xls)或XSSFRow和XSSFCell(对于xlsx)来操作单元格的值、日期等 // 示例: List<List<Object>> dataList = new LinkedList<>(); for (HSSFSheet sheet : workbook.getSheets()) { // 或者XSSFSheet for (HSSFRow row : sheet) { // 或者XSSFRow List<Object> rowData = new LinkedList<>(); for (HSSFCell cell : row) { // 或者XSSFCell // 读取单元格数据并转换类型 String value = cell.getStringCellValue(); // ... 处理日期、数值等 rowData.add(value); } dataList.add(rowData); } } return dataList; } ``` 这个示例代码的核心是`readWorkbook`方法,它根据文件的格式选择正确的工作簿类(HSSFWorkbook或XSSFWorkbook),然后遍历工作簿的每个工作表,读取行和单元格的数据。注意,实际操作时可能需要对单元格数据进行适当的类型转换和格式处理,如日期的解析和格式化。通过这种方式,Java程序可以有效地处理不同版本的Excel文件,确保数据的一致性和兼容性。