poi读取excel数据一直报错Cannot get a STRING value from a NUMERIC cell

最近在写接口自动化的代码,计划是将接口内容存入excel表格中,然后用poi来读取表格中的内容。

理想总是丰满的,可现实用大耳刮子告诉她是多么的骨干。。。。。

闲话休提,言归正传看下我碰到了什么坑吧。

下面的图是我实验的数据


在下面的是我的实验代码

public class PoiTest {
	public static void main(String[] args) throws IOException {
		FileInputStream filepath = new FileInputStream("D:\\data.xlsx");
		XSSFWorkbook workbook = new XSSFWorkbook(filepath);
		XSSFSheet sheet = workbook.getSheetAt(0);
		XSSFRow row1 = sheet.getRow(0);//第一张表单的第一行
		XSSFRow row2 = sheet.getRow(1);//第一张表单的第二行
		XSSFCell cell = null;
		Map<String, String> map = new HashMap<String, String>();
		//循环来读取excel表格中的数据放入map键值对
		for (int i = 0; i <= 3; i++) {
	map.put(row1.getCell(i).getStringCellValue(), row2.getCell(i).getStringCellValue());
		}
		System.out.println(map.toString());
		
	}
}

代码应该很好理解吧,就是将{第一行第一列、第二行第一列}(字段名、值),以键值对的形式存放到map中。

但这短短几行的代码执行起来就要了亲命了,总是报下面的错

java.lang.IllegalStateException: Cannot get a STRING value from a NUMERIC cell

看到Illegal这个单词,我隐约感觉该不会是我第一行是数字却用了getStringCellValue这个获取string类型的方法导致的吧。

所以就试着改成了getNumericCellValue方法,输出查看了下结果,果然是数据类型的问题。既然发现了问题所在那就改吧。

想着是将excel中的数字类型改成文本,这样不就可以直接读出string了吗,但试了之后还是不行,数据读出来依然是数字类型。。。

但我又不愿意强转,会让之后存放map时代码太不漂亮。只能求助于Google了,查了才知道poi自己就提供了一个很好的方法,setCellType,直接定义单元格的类型。按这个方法再次修改代码之后,果然一遍就通了

FileInputStream filepath = new FileInputStream("D:\\data.xlsx");
		XSSFWorkbook workbook = new XSSFWorkbook(filepath);
		XSSFSheet sheet = workbook.getSheetAt(0);
		XSSFRow row1 = sheet.getRow(0);//第一张表单的第一行
		XSSFRow row2 = sheet.getRow(1);//第一张表单的第二行
		XSSFCell cell = row1.getCell(0);
		cell.getNumericCellValue()
		cell.setCellType(XSSFCell.CELL_TYPE_STRING);
		System.out.println(cell.getStringCellValue());
		Map<String, String> map = new HashMap<String, String>();
		//循环来读取excel表格中的数据放入map键值对
		for (int i = 0; i <= 3; i++) {
			row1.getCell(i).setCellType(XSSFCell.CELL_TYPE_STRING);
			row2.getCell(i).setCellType(XSSFCell.CELL_TYPE_STRING);
			map.put(row1.getCell(i).getStringCellValue(), row2.getCell(i).getStringCellValue());
		}
		System.out.println(map.toString());
		

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值