Java POI對Excel操作,專案開發中遇到的問題,及解決方案
阿新 • • 發佈:2019-01-08
java POI官網地址,裡面有介紹POI的使用,以及各種例子程式碼:
說下在專案開發中遇到的java操作Excel的棘手問題,以及解決方案:
首先記下2007版及以上Excel版本(.xlsx)的檔案讀取、輸出程式碼:
讀取:
public static Workbook getTemplateExcel(String path) { // 字尾為.xlsx的Excel檔案 Workbook workbook = null; File file = new File(path); try { InputStream is = new FileInputStream(file); workbook = new XSSFWorkbook(is); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return workbook; }
輸出:
public static boolean outputExcel(Workbook workbook, String outputPath) { boolean result = false; File file = new File(outputPath); try { OutputStream os = new FileOutputStream(file); workbook.write(os); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return result; }
問題1:給給定單元格設定值時,NullPointException異常
時常,在給Excel指定單元格寫入資料的時候,會這樣寫:
Sheet sheet = workbook.getSheet("test1");
sheet.getRow(0).getCell(0).setCellValue(1);
但是,可能會忽略一點,get到的Cell是否為null值,所以會空指標異常
所以程式碼需要這樣寫:
Sheet sheet = workbook.getSheet("test1"); if (sheet.getRow(0) == null) { sheet.createRow(0); if (sheet.getRow(0).getCell(0) == null) { sheet.createRow(0).createCell(0); } } sheet.getRow(0).getCell(0).setCellValue(1);
問題2:當模版Excel裡面有公式計算的時候,需要給指定單元格設值,輸出的Excel公式沒起作用
模版sheet中,有公式:
Excel輸出後:
程式碼如下:
Workbook workbook = ExcelUtil.getTemplateExcel(DefinedValue.INPUT_PATH + "test.xlsx");
Sheet sheet = workbook.getSheet("test1");
Row row0 = sheet.createRow(0);
Row row1 = sheet.createRow(1);
row0.createCell(0);
row0.createCell(1);
row0.createCell(2);
row1.createCell(0);
row1.createCell(1);
row1.createCell(2);
sheet.getRow(0).getCell(0).setCellValue(1);
sheet.getRow(0).getCell(1).setCellValue(2);
sheet.getRow(0).getCell(2).setCellValue(3);
sheet.getRow(1).getCell(0).setCellValue(1.1);
sheet.getRow(1).getCell(1).setCellValue(2.2);
sheet.getRow(1).getCell(2).setCellValue(3.3);
ExcelUtil.outputExcel(workbook, DefinedValue.OUTPUT_PATH + "t1.xlsx");
所以,需要在輸出之前加入這樣一句話,即可:
workbook.getCreationHelper().createFormulaEvaluator().evaluateAll();
問題3:POI設定單元格下拉框,如果設定長度超過255,輸出的Excel,在開啟時會出錯(檔案有不可讀取的地方)
程式碼設定單元格下拉框程式碼(官網程式碼):
這樣輸出的檔案,如果被設定單元格字元長度(下拉選單所有item的長度)總共超過255,這樣設定會出錯,但官網又給了另外一套處理方案,那就是將要被設定的List值先設定到Excel的隱藏sheet裡面,然後讀取到單元格中,程式碼如下:
如果,還有朋友碰到過POI中遇到的棘手問題,可以下方留言,以及解決方案,感謝