导入Excel报表时遇到的一个Bug
错误的相关情况及导致原因
使用excel报表导入导出数据,大家应该经常遇到,这里版主是使用poi来完成导入数据更新的功能,导致遇到问
题的原因是:
单元格默认将单元格里面的内容解析成数字形式,然而后端取数据时使用的是:
row.getCell(j).getStringCellValue()
以下是版主的数据样例图
错误日志
// 错误日志
java.lang.IllegalStateException: Cannot get a text value from a numeric cell
at org.apache.poi.hssf.usermodel.HSSFCell.typeMismatch(HSSFCell.java:643)
at org.apache.poi.hssf.usermodel.HSSFCell.getRichStringCellValue(HSSFCell.java:720)
at org.apache.poi.hssf.usermodel.HSSFCell.getStringCellValue(HSSFCell.java:703)
解决办法
第一种加 ‘ 号
对excel报表文件中,有数字的单元格内容前加上 ‘ 符号,下面为示例图
第二种加代码中进行类型转换
类型转换代码,这个可能会遇到方法过时问题
// 自己的部分代码
Row getRow = null;
//读第几个sheet 根据自己情况来,或者可以遍历取到自己想取的sheet页,这里不做过多解释
//自己可以尝试有问题可以私信版主
Sheet readSheet = readbook.getSheetAt(2);
for (int curIndex = first; curIndex <= last; curIndex++) {
// 把excel单元格的内容保存到数据对象
Info info = new Info();
getRow = readSheet.getRow(curIndex);
// 线路名称
getRow .getCell(j).setCellType(Cell.CELL_TYPE_STRING);
String cellData = getRow .getCell(j).getStringCellValue();
}
第三种使用DataFormatter处理(版主推荐并自用)
这里就是舍弃 row.getCell(j).getStringCellValue() 这种取值的办法,使用 DataFormatter 来对数据进行格式处理
// 自己的部分代码
Row getRow = null;
//读第几个sheet 根据自己情况来,或者可以遍历取到自己想取的sheet页,这里不做过多解释
//自己可以尝试有问题可以私信版主
Sheet readSheet = readbook.getSheetAt(2);
for (int curIndex = first; curIndex <= last; curIndex++) {
// 把excel单元格的内容保存到数据对象
Info info = new Info();
getRow = readSheet.getRow(curIndex);
// 线路名称
getRow .getCell(j).setCellType(Cell.CELL_TYPE_STRING);
if (getCell != null) {
DataFormatter formatter = new DataFormatter();
String cellData = formatter.formatCellValue(getCell);
}
}
结语
版主不是职业的,只是记录工作或学习中所使用到的一些知识点和自己工作中遇到的一些问题,一是为了以后方
便自己解决重复问题,二是记录下来进行分享,希望对大家有所帮助,谢谢观看!