欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-05-15 18:18:25
...

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

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

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

下面的图是我实验的数据

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

在下面的是我的实验代码

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());
		
poi读取excel数据一直报错Cannot get a STRING value from a NUMERIC cell
相关标签: v