在使用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) {
// 如果字符串不能转换为数字,返回-1
return -1;
}
case NUMERIC:
// 如果是数字类型,直接返回数字
return cell.getNumericCellValue();
case BOOLEAN:
// 如果是布尔类型,true转换为1,false转换为0
return cell.getBooleanCellValue() ? 1 : 0;
case FORMULA:
// 如果是公式类型,返回-1
return -2;
default:
// 对于其他类型,返回-1
return -3;
}
}
}
然后我们必须要从cell中取String类型就这样使用
ExcelUtil.getCellValueString(row.getCell(2));
取double类型就这样使用
ExcelUtil.getCellValueNumber(row.getCell(3));
避免excel总是自动转换或者用户输入错误造成的导入数据错误.