最近工作中用到Java读取Execl中的数据,相比于txt,csv等,Execl显得有点复杂,在这里记录下来,记性不好怕忘记,这里主要用到的是poi这种方式。
项目中用到的Jar包在这就不上传了,详见截图吧
Execl因版本不同有xlsx和xls格式,对此要分开处理,其程序的主要代码如下:
try { InputStream in = new FileInputStream(filePath); type = filename.substring(filename.lastIndexOf(".") + 1).trim();//取得文件后缀名 Workbook wb = null; if ("xlsx".equals(type)) { wb = new XSSFWorkbook(in);// Excel 2007 } else if ("xls".equals(type)) { wb = (Workbook) new HSSFWorkbook(in);// Excel 2003 } Sheet sheet = wb.getSheetAt(0);// 获取文件的第一个工作表 Row row = null; Cell cell = null; int totalRows = sheet.getPhysicalNumberOfRows();// 总行数 int totalCells = sheet.getRow(0).getPhysicalNumberOfCells();// 总列数 FormulaEvaluator evaluator = wb.getCreationHelper() .createFormulaEvaluator(); for (int i = 1; i < totalRows; i++) { List<String> celllist = new ArrayList<String>(); row = sheet.getRow(i); Object cellValue = null; for (int k = 0; k < totalCells; k++) { cell = row.getCell(k); if (null != cell) { switch (cell.getCellType()) { case HSSFCell.CELL_TYPE_NUMERIC: // 数字 cellValue = cell.getNumericCellValue(); break; case HSSFCell.CELL_TYPE_STRING: // 字符串 cellValue = cell.getStringCellValue(); break; case HSSFCell.CELL_TYPE_BOOLEAN: // Boolean cellValue = cell.getBooleanCellValue() + ""; break; case HSSFCell.CELL_TYPE_FORMULA: // 公式 evaluator.evaluateFormulaCell(cell); cellValue = cell.getNumericCellValue(); break; case HSSFCell.CELL_TYPE_BLANK: // 空值 cellValue = ""; break; case HSSFCell.CELL_TYPE_ERROR: // 故障 cellValue = "非法字符"; break; default: cellValue = "未知类型"; break; } } else { cellValue = ""; } if(cell.getCellType() == 0){ //判断是否为数字格式避免出现 9变为9.0 cell.setCellType(HSSFCell.CELL_TYPE_STRING); cellValue = cell.getStringCellValue(); } celllist.add(cellValue+"");