Java利用POI读取Excel示例与解析

需积分: 10 1 下载量 189 浏览量 更新于2024-09-11 收藏 42KB DOC 举报
"这篇文档是关于使用Apache POI库在Java中读取Excel文件的示例程序。通过导入相应的jar包并使用特定的API,开发者可以实现对Excel文档的读取操作,对进行Excel开发的人员具有指导意义。" Apache POI是一个流行的开源Java API,它允许开发人员创建、修改和显示Microsoft Office格式的文件,其中包括Excel。在这个例子中,我们将重点放在如何使用POI来读取Excel文件。 首先,确保在项目中引入了`poi-3.1-FINAL.jar`库。接着,在Java代码中,我们需要引入相关的包,例如`java.io`用于处理输入输出,以及`org.apache.poi`包,它是POI库的一部分,包含处理Excel文件所需的类。 以下是一个简单的读取Excel文件的Java程序: ```java package demo.excel; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.util.ArrayList; import java.util.List; import org.apache.poi.hssf.eventusermodel.HSSFRequest; import org.apache.poi.hssf.model.Sheet; import org.apache.poi.hssf.model.Workbook; import org.apache.poi.hssf.usermodel.HSSFCell; import org.apache.poi.hssf.usermodel.HSSFRow; import org.apache.poi.hssf.usermodel.HSSFSheet; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.poifs.filesystem.POIFSFileSystem; public class ExcelDemo { public static void main(String[] args) { File f = new File("f:/aa.xls"); if (f.exists()) { try { InputStream fis = new FileInputStream(f); // 创建POIFSFileSystem对象,用于读取Excel文件 POIFSFileSystem poifs = new POIFSFileSystem(fis); // 创建HSSFWorkbook对象,表示整个Excel工作簿 HSSFWorkbook wb = new HSSFWorkbook(poifs); List<List<String>> retList = new ArrayList<>(); System.out.println("此文件中表的数量是:" + wb.getNumberOfSheets()); // 遍历每个工作表 for (int sheetIndex = 0; sheetIndex < wb.getNumberOfSheets(); sheetIndex++) { HSSFSheet sheet = wb.getSheetAt(sheetIndex); System.out.println("当前工作表名称:" + sheet.getSheetName()); // 遍历每行数据 for (int rowIndex = 0; ; rowIndex++) { // 注意:终止条件通常为HSSFRow.getLastRowNum()+1 HSSFRow row = sheet.getRow(rowIndex); if (row == null) break; // 如果行为空,跳出循环 List<String> rowData = new ArrayList<>(); // 遍历单元格数据 for (int cellIndex = 0; cellIndex < row.getLastCellNum(); cellIndex++) { HSSFCell cell = row.getCell(cellIndex); if (cell != null) { String cellValue = getCellValue(cell); rowData.add(cellValue); } } retList.add(rowData); } } // 关闭工作簿和输入流 wb.close(); fis.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } else { System.out.println("文件不存在!"); } } // 获取单元格的值 private static String getCellValue(HSSFCell cell) { switch (cell.getCellType()) { case STRING: return cell.getStringCellValue(); case NUMERIC: return String.valueOf(cell.getNumericCellValue()); // 处理其他类型的单元格值 // ... } return ""; } } ``` 在这个程序中,我们首先创建`POIFSFileSystem`对象来打开Excel文件,然后通过它创建`HSSFWorkbook`对象,该对象代表整个Excel工作簿。我们可以通过`getNumberOfSheets()`方法获取工作簿中的工作表数量,并使用`getSheetAt(int index)`来访问特定索引的工作表。 在遍历工作表的过程中,我们读取每一行(`HSSFRow`)和每个单元格(`HSSFCell`)。`HSSFRow.getLastCellNum()`返回行中最后一个非空白单元格的索引,`HSSFCell.getCellType()`确定单元格的类型(如字符串、数字等),并根据类型提取对应的值。 读取完成后,记得关闭工作簿和输入流以释放资源。这个例子中,读取到的数据被存储在一个二维列表中,方便后续处理。 Apache POI提供了一套丰富的API,使得Java开发者能够方便地处理Excel文件,包括读取、写入和修改数据,以及创建新的Excel文件。通过理解和应用这些API,你可以构建自己的Excel处理工具或集成到现有的业务系统中。