在業務系統中多少回接觸到Excel解析。在java開發平臺下選擇 Apache POI是一個很是明智的選擇,POI提供很是完善API來讀取或寫入Microsoft Office Excel。java
目前對導入的數據都會進行二次加工,咱們開發模式就是先把Excel中的內容直接原樣導入數據庫對應的一張數據表中,而後再進行二次加工。什麼是原樣,那就是咱們在excle看到是什麼樣的,導入的數據就是什麼樣的,那怎樣實現呢?數據庫
首先考慮到,exce另存爲csv,而後在解析csv就能夠,excel另存爲csv後,以下ide
彷佛這樣就能夠了,但用戶上傳的Excel文件經過後臺轉換csv文件也麻煩(PS:其實我都不知道怎麼轉,有知道的朋友還但願能分享下),說好不是用POI的麼,那麼接下來咱們瞭解下POI中處理Excel的一些信息lua
從上圖得知,POI類中帶HSSF的是處理03格式的,XSSF是處理07以上格式的,廢話很少說了,先看看原樣輸出的一個重要角色 DataFormatter,spa
查閱官方文檔,紅框的地方清楚說明了,就是現實Excel中的現實的文本excel
這裏對於公式類型的還須要判斷下,code
1 DataFormatter df = new DataFormatter(); 2 if (cell.getCellType() == cell.CELL_TYPE_FORMULA) { 3 FormulaEvaluator formulaEval = wb.getCreationHelper().createFormulaEvaluator(); 4 value = df.formatCellValue(cell, formulaEval); 5 } else { 6 value = df.formatCellValue(cell); 7 }
因此就這麼一句代碼,就取得的單元格中顯示的值,算是大工搞成。ps:解析Excle的完整代碼orm
1 private ArrayList<String[]> GetExcel(String filename) 2 throws FileNotFoundException, IOException, Exception { 3 File f = new File(filename); 4 ArrayList data = new ArrayList(); 5 if (f.exists()) { 6 InputStream fis = new FileInputStream(f); 7 Workbook wb = WorkbookFactory.create(fis); 8 Sheet fst = wb.getSheetAt(0); 9 int rowcount = fst.getLastRowNum(); 10 Row headrow = fst.getRow(0); 11 int colcount = headrow.getLastCellNum(); 12 for (int ri = 0; ri <= rowcount; ri++) { 13 System.out.println(""); 14 System.out.println("第" + ri + "行數據"); 15 String[] colValues = new String[colcount]; 16 Row row = fst.getRow(ri); 17 for (int i = 0; i < colcount; i++) { 18 Cell cell = row.getCell(i); 19 String value = ""; 20 if (cell != null) { 21 DataFormatter df = new DataFormatter(); 22 if (cell.getCellType() == cell.CELL_TYPE_FORMULA) { 23 FormulaEvaluator formulaEval = wb.getCreationHelper().createFormulaEvaluator(); 24 value = df.formatCellValue(cell, formulaEval); 25 } else { 26 value = df.formatCellValue(cell); 27 } 28 } 29 colValues[i] = value; 30 System.out.print(colValues[i] + "--"); 31 } 32 data.add(colValues); 33 } 34 } 35 f.delete(); 36 return data; 37 }
2015-12-04 blog