注意:
(1)判断行的最大数量建议使用sheet.getLastRowNum();
(2)判断每行最大列数建议使用row.getLastCellNum();
getPhysicalNumberOfRows()获取的是物理行数,也就是不包括那些空行(隔行)的情况。
getLastRowNum()获取的是最后一行的编号(编号从0开始)。
int org.apache.poi.ss.usermodel.Sheet.getPhysicalNumberOfRows()
Returns the number of physically defined rows (NOT the number of rows in the sheet)
int org.apache.poi.ss.usermodel.Sheet.getLastRowNum()
Gets the last row on the sheet
- Returns:
- last row contained in this sheet (0-based)
public class ImportExcel { private static Logger log = LoggerFactory.getLogger(ImportExcel.class); /** * 工作薄对象 **/ private Workbook wb; /** * 工作表对象 **/ private Sheet sheet; /** * 标题行号 */ private int headerNum; /** * 构造函数 * @param path 导入文件,读取第1个工作表 * @param headerNum 标题行号,数据行等于标题行号+1 * @throws InvalidFormatException * @throws IOException */ public ImportExcel(String fileName, int headerNum) throws InvalidFormatException, IOException { this(new File(fileName), headerNum); } /** * 构造函数 * @param path 导入文件对象,读取第1个工作表 * @param headerNum 标题行号,数据行等于标题行号+1 * @throws InvalidFormatException * @throws IOException */ public ImportExcel(File file, int headerNum) throws InvalidFormatException, IOException { this(file, headerNum, 0); } /** * 构造函数 * @param path 导入文件 * @param headerNum 标题行号,数据行等于标题行号+1 * @param sheetIndex 工作表编号,以0开始 * @throws InvalidFormatException * @throws IOException */ public ImportExcel(String fileName, int headerNum, int sheetIndex) throws InvalidFormatException, IOException { this(new File(fileName), headerNum, sheetIndex); } /** * 构造函数 * @param path 导入文件对象 * @param headerNum 标题行号,数据行等于标题行号+1 * @param sheetIndex 工作表编号,以0开始、 * @throws InvalidFormatException * @throws IOException */ public ImportExcel(File file, int headerNum, int sheetIndex) throws InvalidFormatException, IOException { this(file.getName(), new FileInputStream(file), headerNum, sheetIndex); } /** * 构造函数 * @param file 导入文件对象 * @param headerNum 标题行号,数据行等于标题行号+1 * @param sheetIndex 工作表编号,以0开始、 * @throws InvalidFormatException * @throws IOException */ /** * 构造函数 * @param path 导入文件对象 * @param headerNum 标题行号,数据行等于标题行号+1 * @param sheetIndex 工作表编号,以0开始、 * @throws InvalidFormatException * @throws IOException */ public ImportExcel(String fileName, InputStream is, int headerNum, int sheetIndex) throws InvalidFormatException, IOException { if (StringUtils.isBlank(fileName)){ throw new RuntimeException("导入文档为空!"); }else if(fileName.toLowerCase().endsWith("xls")){ this.wb = new HSSFWorkbook(is); }else if(fileName.toLowerCase().endsWith("xlsx")){ this.wb = new XSSFWorkbook(is); }else{ throw new RuntimeException("文档格式不正确?"); } if (this.wb.getNumberOfSheets()<sheetIndex){ throw new RuntimeException("文档中没有工作表!"); } this.sheet = this.wb.getSheetAt(sheetIndex); this.headerNum = headerNum; log.debug("Initialize success."); } /** * 获取行对象 * @param rownum * @return */ public Row getRow(int rownum){ return this.sheet.getRow(rownum); } /** * 获取数据行号 * @return */ public int getDataRowNum(){ return headerNum+1; } /** * 获取工作表中的最后一行的行号,以0开始 * @return */ public int getLastDataRowNum(){ return this.sheet.getLastRowNum(); } /** * 获取一行记录总的列数 * @return */ public int getLastCellNum(){ return this.getRow(headerNum).getLastCellNum(); } /** * 获取单元格的值 * @param row 获取的行 * @param column 获取单元格列号 * @return 单元格的值 */ public Object getCellValue(Row row, int column){ Object val = ""; try{ Cell cell = row.getCell(column); if (cell != null){ if (cell.getCellType() == Cell.CELL_TYPE_NUMERIC){ val = cell.getNumericCellValue(); }else if (cell.getCellType() == Cell.CELL_TYPE_STRING){ val = cell.getStringCellValue(); }else if (cell.getCellType() == Cell.CELL_TYPE_FORMULA){ val = cell.getCellFormula(); }else if (cell.getCellType() == Cell.CELL_TYPE_BOOLEAN){ val = cell.getBooleanCellValue(); }else if (cell.getCellType() == Cell.CELL_TYPE_ERROR){ val = cell.getErrorCellValue(); } } }catch (Exception e) { return val; } return val; } /** * 导入测试 */ public static void main(String[] args) throws Throwable { ImportExcel ei = new ImportExcel("import.xls", 0); System.out.println(ei.getLastDataRowNum()); System.out.println(ei.getDataRowNum()); for (int i = ei.getDataRowNum(); i <= ei.getLastDataRowNum(); i++) { Row row = ei.getRow(i); System.out.println("Row num:"+i); for (int j = 0; j < ei.getLastCellNum(); j++) { Object val = ei.getCellValue(row, j); System.out.print(val+", "); } System.out.print("\n"); } } }