在使用POI导出Excel数据的时候这样
FileInputStream inputStream = new FileInputStream(file);Workbook workbook = WorkbookFactory.create(inputStream);Sheet sheet = workbook.getSheetAt(0);for (Row row : sheet) {row.getCell(1).getStringCellValue();......}
row.getCell(1).getStringCellValue(); 这里是很容易报错的. 因为excel里的列格式即使设置为文本
当cell内的值是一个纯数字的时候, POI取到的还会是一个double类型的值. getStringCellValue(这个方法就会抛出类型不匹配的错误.)
为了解决这个常见问题. 写了这个工具类
public class ExcelUtil {public static String getCellValueString(Cell cell){if (cell != null) {switch (cell.getCellType()) {case STRING:// 如果单元格内容是字符串类型return cell.getStringCellValue();case NUMERIC:// 如果单元格内容是数字类型double numericValue = cell.getNumericCellValue();return String.valueOf(numericValue); // 转为字符串后设置case BOOLEAN:// 如果单元格内容是布尔值类型boolean booleanValue = cell.getBooleanCellValue();return String.valueOf(booleanValue); // 转为字符串后设置case FORMULA:// 如果单元格是公式String formulaValue = cell.getCellFormula();return formulaValue; // 设置公式字符串default:// 其他类型的处理(如空单元格)return ""; // 设置为空字符串}} else {// 如果单元格为空return ""; // 设置为空字符串}}public static double getCellValueNumber(Cell cell){if (cell == null) {return -4; // 如果单元格为空,返回-1}switch (cell.getCellType()) {case STRING:try {// 尝试将字符串转换为数字return Double.parseDouble(cell.getStringCellValue());} catch (NumberFormatException e) {// 如果字符串不能转换为数字,返回-1return -1;}case NUMERIC:// 如果是数字类型,直接返回数字return cell.getNumericCellValue();case BOOLEAN:// 如果是布尔类型,true转换为1,false转换为0return cell.getBooleanCellValue() ? 1 : 0;case FORMULA:// 如果是公式类型,返回-1return -2;default:// 对于其他类型,返回-1return -3;}}
}
然后我们必须要从cell中取String类型就这样使用
ExcelUtil.getCellValueString(row.getCell(2));
取double类型就这样使用
ExcelUtil.getCellValueNumber(row.getCell(3));
避免excel总是自动转换或者用户输入错误造成的导入数据错误.