poi读取excel数据一直报错Cannot get a STRING value from a NUMERIC cell
程序员文章站
2022-05-15 18:18:25
...
最近在写接口自动化的代码,计划是将接口内容存入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());
上一篇: java 字节流实现目录的复制