/** * @param filePath 文件路径 * @Description 判断Excel版本 * @Throws * @Return org.apache.poi.ss.usermodel.Workbook * @Date 2020-07-23 18:56:29 * @Author WangKun */ public static Workbook readExcel(String filePath) { if (filePath == null) { return null; } String extString = filePath.substring(filePath.lastIndexOf(".")); try { InputStream is = new FileInputStream(filePath); if (".xls".equals(extString)) { return new HSSFWorkbook(is); } else if (".xlsx".equals(extString)) { return new XSSFWorkbook(is); } } catch (Exception e) { e.printStackTrace(); } return null; }
/** * @param file * @Description 文件解析 * @Throws * @Return void * @Date 2020-07-23 18:57:32 * @Author WangKun */
public void importExcel(File file) { Workbook wb; Sheet sheet; Row row; wb = readExcel(file.getAbsolutePath()); if (wb != null) { try { List<List<List<Object>>> list = new ArrayList<>(); // 循环页签 for (int sheetNum = 0; sheetNum < wb.getNumberOfSheets(); sheetNum++) { // 指定页签的值 sheet = wb.getSheetAt(sheetNum); // 定义存放一个页签中所有数据的List List<List<Object>> sheetList = new ArrayList<>(); // 循环行 for (int rowNum = 0; rowNum <= sheet.getLastRowNum(); rowNum++) { // 指定行的值 row = sheet.getRow(rowNum); // 定义存放一行数据的List List<Object> rowList = new ArrayList<>(); // 循环列 for (int cellNum = 0; cellNum < row.getLastCellNum(); cellNum++) { Cell cell = sheet.getRow(rowNum).getCell(cellNum); rowList.add(getStringCellValue(cell)); } sheetList.add(rowList); } list.add(sheetList); //得到数据list } // 处理数据 } catch (Exception e) { logger.error("遍历数据失败", e); e.printStackTrace(); } } }
/** * @param cell * @Description 单元格格式 * @Throws * @Return java.lang.String * @Date 2020-07-23 18:56:54 * @Author WangKun */ public static String getStringCellValue(Cell cell) { String cellvalue; if (cell == null) { return ""; } switch (cell.getCellType()) { case Cell.CELL_TYPE_STRING: cellvalue = cell.getStringCellValue(); break; case Cell.CELL_TYPE_NUMERIC: if (DateUtil.isCellDateFormatted(cell)) { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); Date date = cell.getDateCellValue(); cellvalue = sdf.format(date); } else { cellvalue = String.valueOf(cell.getNumericCellValue()); } break; case Cell.CELL_TYPE_BOOLEAN: cellvalue = String.valueOf(cell.getBooleanCellValue()); break; case Cell.CELL_TYPE_BLANK: cellvalue = ""; break; default: cellvalue = ""; break; } return cellvalue; }
mave配置
<!--POI 开始 版本最好统一,否则会出现各种奇怪的问题--> <dependency> <groupId>org.apache.xmlbeans</groupId> <artifactId>xmlbeans</artifactId> <version>2.6.0</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>3.9</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>3.9</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml-schemas</artifactId> <version>3.9</version> </dependency> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-collections4</artifactId> <version>4.1</version> </dependency> <!--POI 结束-->
关于java读取Excel表格数据流出现的一系列报错问题的解决方案,含辛茹苦磨砺总结得出!