你的位置:首页 > Java教程

[Java教程]使用poi读取excel时,getRow()方法返回null


新人一枚,说说今天在工作上遇到的问题。

由于工作需要,在做一个下载excel文件的功能时,要求读取服务器上的模板文件写入数据,然后再传输到客户端。我刚工作没多久,而且因为某些原因接触到的技术太少,所以就用读取模板上的标题与从数据库中取的的数据进行关联,然后写入,如果有更好的方法,请赐教。

写完测试的时候遇到了一个问题,就是模板上第一行标题行有数据,但是用getRow()方法取到的Row却为null,懵逼了,查了好久查不出来,百度也搜不到,最后跟自己写的另一个相似的方法对比,原因找出来了!不能使用SXSSFWorkbook读取excel数据,要用XSSFWorkbook读取数据!

原来的代码是:

File test = new File("D:\\test.xlsx");try { XSSFWorkbook wb = new XSSFWorkbook(new FileInputStream(test)); SXSSFWorkbook workbook = new SXSSFWorkbook(wb); Sheet sheet = workbook.getSheetAt(0); for (int i = 0; i < 5; i++) {  Row row = sheet.getRow(i);  if(row==null){   System.out.println(i+":null");  } }} catch (Exception e) { e.printStackTrace();}

最终控制台输出的结果为:

将sheet对象的获取改为wb.getSheetAt(0)之后,就能正常获得row了。

File test = new File("D:\\test.xlsx");try {  XSSFWorkbook wb = new XSSFWorkbook(new FileInputStream(test));//  SXSSFWorkbook workbook = new SXSSFWorkbook(wb);  Sheet sheet = wb.getSheetAt(0);  for (int i = 0; i < 5; i++) {    Row row = sheet.getRow(i);    if(row==null){      System.out.println(i+":null");    }  }} catch (Exception e) {      e.printStackTrace();}

View Code

输出的结果为:

我不知道为什么会出现这种情况,如果有知道的朋友,希望指导一下。