使用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

输出的结果为:

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

posted @ 2016-05-04 18:14  海那边天尽头  阅读(24609)  评论(7编辑  收藏  举报