使用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(); }
输出的结果为:
我不知道为什么会出现这种情况,如果有知道的朋友,希望指导一下。