新人一枚,說說今天在工作上遇到的問題。
由於工作需要,在做一個下載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(); }
輸出的結果為:
我不知道為什么會出現這種情況,如果有知道的朋友,希望指導一下。