POI读取Excel有两种格式一个是HSSF,另一个是XSSF。本文主要是利用HSSF读取Excel
先说下HSSF和XSSF的区别
官方给出的解释如下:
HSSF is the POI Project's pure Java implementation of the Excel '97(-2007) file format. XSSF is the POI Project's pure Java implementation of the Excel 2007 OOXML (.xlsx) file format.
即:HSSF适用2007及以前的版本,XSSF适用2007版本以上的
现在进入正题
Step1:读取Excel
FileInputStream fis = new FileInputStream(path);//path为Excel路径 HSSFWorkbook wb = new HSSFWorkbook(fis);
Sheet sheet = wb.getSheetAt(sheetNumber);//sheetNumber为sheet的编号,从0开始
for (Iterator<Row> rit = sheet.rowIterator(); rit.hasNext();) { Row row = rit.next(); for (Iterator<Cell> cit = row.cellIterator(); cit.hasNext();) { Cell cell = cit.next(); //做些什么 } }PS:用Row对象的cellIterator()方法遍历每行的单元格,当单元格内容为NULL的时候,是会自动跳过的 (囧 我就吃了这个亏……),可以改用Row对象的getCell(int num)方法,获得num指的的单元格内容(可能为NULL)
Step4:获得单元格(Cell)内容,以下是我根据官方给出的方法,自己改了下,返回的都是String类型的值(项目需要 Orz)
private String returnCellValue(Cell cell) { String value = ""; switch (cell.getCellType()) { case Cell.CELL_TYPE_STRING: value = cell.getRichStringCellValue().getString(); break; case Cell.CELL_TYPE_NUMERIC: if (DateUtil.isCellDateFormatted(cell)) { Date date = cell.getDateCellValue(); value = date.toString(); } else { int d = (int) cell.getNumericCellValue(); value = d + ""; } break; case Cell.CELL_TYPE_BOOLEAN: boolean b = cell.getBooleanCellValue(); value = b + ""; break; case Cell.CELL_TYPE_FORMULA: value = cell.getCellFormula(); break; default: // System.out.println(); } return value; }