相关包
// xlsx工作簿 XSSFWorkbook xsswb = null; // xlsx工作表 XSSFSheet xsssheet = null; // xlsx行 XSSFRow xssrow = null; // xls工作簿 HSSFWorkbook hsswb = null; // xls工作表 HSSFSheet hsssheet = null; // xls行 HSSFRow hssrow = null; // 判断后缀名文件类型 if (".xlsx".equals(fileExte)) { // 得到xlsx工作簿对象 xsswb = new XSSFWorkbook(new FileInputStream(fullFilePath)); // 得到xlsx工作表对象 xsssheet = xsswb.getSheetAt(0); // 得到xlsx有效行数 endRowIndex = xsssheet.getLastRowNum(); } else { // 得到xls工作簿对象 hsswb = new HSSFWorkbook(new FileInputStream(fullFilePath)); // 得到xls工作表对象 hsssheet = hsswb.getSheetAt(0); // 得到xls有效行数 endRowIndex = hsssheet.getLastRowNum(); } // 逐行解析excel数据 for (int i = startRowIndex; i <= endRowIndex; i++) { //判断文件后缀 if (".xlsx".equals(fileExte)) { // 获取当前行数据 xssrow = xsssheet.getRow(i); // 如果该条记录没有数据,则 xssrow 是null if (xssrow == null) { //跳出循环不解析本行 continue; } // 第四列为空的不解析本行 value = getExcelCellValue(xssrow, 3);//获取当前行第四列数据,可根据数据得唯一性获取 if ("".equals(value)) {//判断该数据是否为空,为空可跳出本次循环不解析本行 continue; } //获取该行总列数 int RowCount = xssrow.getPhysicalNumberOfCells(); //从四格单元格开始 for (int j = 3; j <= RowCount ; j++) { // 获取对应的值 value = getExcelCellValue(xssrow, j);// 数据从第四列开始的 } }else{ //xls文件解析方式 //获取xls当前行数据 hssrow = hsssheet.getRow(i); //获取xls总列数 hssrow .getPhysicalNumberOfCells(); for (int j = 3; j <= RowCount ; j++) { // 获取对应的值 value = getExcelCellValue(xssrow, j);// 数据从第四列开始的 } } } //获取单元格数据 private static String getExcelHSSFCellValue(HSSFRow row, int colIndex) { String cellValue = StringUtils.EMPTY; //获取单元格数据 HSSFCell cell = row.getCell(colIndex); //数据不为空时判断数值类型 if (cell != null) { switch (cell.getCellType()) { case HSSFCell.CELL_TYPE_NUMERIC: cellValue = String.valueOf(cell.getNumericCellValue()); break; case HSSFCell.CELL_TYPE_FORMULA: try { cellValue = String.valueOf(cell.getNumericCellValue()); } catch (IllegalStateException e) { cellValue = String.valueOf(cell.getRichStringCellValue()); } break; case HSSFCell.CELL_TYPE_BLANK: cellValue = StringUtils.EMPTY; break; case HSSFCell.CELL_TYPE_BOOLEAN: cellValue = String.valueOf(cell.getBooleanCellValue()); break; case HSSFCell.CELL_TYPE_ERROR: cellValue = String.valueOf(cell.getErrorCellValue()); break; default: cellValue = String.valueOf(cell.getRichStringCellValue()); break; } } //返回转换后的数据值 return cellValue; }
xlsx解析单元数据方法与xls差不多
可获取任意格子得数据进行判断,并处理,是否需要解析这行数据,