使用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);
      }
}

结语

   版主不是职业的,只是记录工作或学习中所使用到的一些知识点和自己工作中遇到的一些问题,一是为了以后方
便自己解决重复问题,二是记录下来进行分享,希望对大家有所帮助,谢谢观看!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值