如何使用Java读取Excel文件
Apache POI介绍
Apache POI,是Apache的开源库,其提供了一系列的Java API,以便Java开发人员能够操作Microsoft Office文档,这其中就包括Excel。
Apache POI提供了用于读取和写入Excel文件的类库. 这些类库支持老版本的.xls和新版本的.xlsx文件格式。下面是一个基本的读取Excel文件的Apache POI代码例子:
import org.apache.poi.ss.usermodel.*; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import java.io.File; import java.io.FileInputStream; public class ReadExcelWithApachePOI { public static void main(String[] args) { try { FileInputStream file = new FileInputStream(new File("path to the file")); Workbook workbook = new XSSFWorkbook(file); Sheet sheet = workbook.getSheetAt(0); Row row = sheet.getRow(0); Cell cell = row.getCell(0); System.out.println("Cell Value: " + cell.getStringCellValue()); workbook.close(); file.close(); } catch (Exception e) { e.printStackTrace(); } } }
使用Apache POI读取Excel数据
import java.io.File; import java.io.FileInputStream; import java.io.IOException; import org.apache.poi.ss.usermodel.*; public class Reader { public static void main(String[] args) throws Exception { try (FileInputStream fis = new FileInputStream(new File("Your Excel File")); Workbook workbook = WorkbookFactory.create(fis)) { Sheet sheet = workbook.getSheetAt(0); for (Row row : sheet) { for (Cell cell : row) { String cellValue = null; switch (cell.getCellType()) { case STRING: cellValue = cell.getStringCellValue(); break; case NUMERIC: cellValue = String.valueOf(cell.getNumericCellValue()); break; case BOOLEAN: cellValue = String.valueOf(cell.getBooleanCellValue()); break; default: break; } System.out.print(cellValue + "t"); } System.out.println(); } } catch (IOException e) { e.printStackTrace(); } } }
处理Excel中的日期和公式
Apache POI 不仅可以读取文本和数字,还可以处理Excel中的日期和公式。
import java.io.File; import java.io.FileInputStream; import java.io.IOException; import org.apache.poi.ss.usermodel.*; public class Reader { public static void main(String[] args) throws Exception { try (FileInputStream fis = new FileInputStream(new File("Your Excel File")); Workbook workbook = WorkbookFactory.create(fis)) { Sheet sheet = workbook.getSheetAt(0); for (Row row : sheet) { for (Cell cell : row) { String cellValue = null; switch (cell.getCellType()) { case STRING: cellValue = cell.getStringCellValue(); break; case NUMERIC: if (DateUtil.isCellDateFormatted(cell)) { cellValue = cell.getDateCellValue().toString(); } else { cellValue = String.valueOf(cell.getNumericCellValue()); } break; case BOOLEAN: cellValue = String.valueOf(cell.getBooleanCellValue()); break; default: break; } System.out.print(cellValue + "t"); } System.out.println(); } } catch (IOException e) { e.printStackTrace(); } } }
处理Excel中的复杂数据类型
有时可能需要处理的Excel文件含有复杂的数据类型,如下的代码片段演示了如何处理公式:
import java.io.File; import java.io.FileInputStream; import java.io.IOException; import org.apache.poi.ss.usermodel.*; import org.apache.poi.xssf.usermodel.XSSFFormulaEvaluator; public class Database { public static void main(String[] args) throws Exception { try (FileInputStream fis = new FileInputStream(new File("Your Excel File")); Workbook workbook = WorkbookFactory.create(fis)) { FormulaEvaluator evaluator = new XSSFFormulaEvaluator((XSSFWorkbook) workbook); Sheet sheet = workbook.getSheetAt(0); for (Row r : sheet) { for (Cell c : r) { if (c.getCellType() == CellType.FORMULA) { evaluator.evaluateFormulaCellEnum(c); } } } } catch (IOException e) { e.printStackTrace(); } } }
这样,Apache POI 便能够对Excel 文件进行全面的读取和处理。