Java解析Excel

lm_y發表於2017-08-03

說明

最近在做一個比較小型的網站,需要批量匯入註冊使用者.使用者的資訊寫在一張excel表格裡面. 
所以就需要讀取excel.所以就記錄下遇到的問題,以及以後檢視.

相關技術

使用的POI解析Excel需要使用的jar包 
這裡寫圖片描述 
注(使用的maven.我就新增了右邊的兩個依賴就可以了)

分析

解析Excel首先就要解析Excel的結構.然後用物件導向的思想分析一下 
這裡寫圖片描述 
這是一個excel檔案.下面我們就來分析一下如果讓你寫這個poi框架,那麼你會怎麼設計. 
1. 首先要有一個物件表示這整個Excel檔案. 
2. 可是這個excel檔案中有好多頁.Sheet1, Sheet2等等,所以我們還需要一個物件表示頁. 
3. 在頁中,有行,所以還需要一個物件表示行. 
4. 在行中,最後細分到格cell. 
5. 格cell中資料還有好多型別.有字串,數字,時間等等.

POI中的物件與excel物件的對應

excel檔案就有多種型別了.字尾有 xls 與 xlsx 
這裡寫圖片描述 
所以對於不同型別的檔案,就需要使用不同的poi中的物件了. 
1. 如果你要解析的是xls檔案 
這裡寫圖片描述 
從程式碼不難發現,這裡的處理邏輯是 
1>. 先用inputstream獲取excel檔案的io流 
2>. 然後建立一個記憶體中的excel檔案HSSFWorkbook型別物件.這個物件表示了整個excel檔案. 
3>. 對這個excel檔案的每頁做迴圈處理 
4>. 對每頁中的每行做迴圈處理. 
5>. 對每行中的每個單元格做做處理,獲取這個單元格的值. 
6>. 把這行的結果新增到一個List陣列中. 
7>. 把每行的結果新增到最後的總結果中. 
8>. 解析完以後就獲取了一個List< List < String > > 型別的物件了. 
2. 如果你要處理xlsx型別的檔案則 
這裡寫圖片描述 
和上面一樣,我就不說了.

存在的問題

其實有時候我們希望得到的資料就是excel中的資料,可是最後發現結果不理想 
如果你的excel中的資料是數字,你會發現Java中對應的變成了科學計數法的. 
所以在獲取值的時候就要做一些特殊處理. 
這樣就能保證獲取的值是我想要的值. 
網上的做法是對於數值型別的資料格式化,獲取自己想要的結果. 
其實也沒有那麼麻煩.我在做的時候突然想到了一種處理解決方案.供參考 
我們看一下poi中對於的toString()方法 
這裡寫圖片描述 
該方法是poi的方法,從原始碼中我們可以發現,該處理流程是 
1. 獲取單元格的型別 
2. 根據型別格式化資料並輸出.這不一下子就造成了很多不是我們想要的. 
所以我們就要改造一下這個方法例如這樣 
這裡寫圖片描述 
我的做法是這樣的 
1. 對於不熟悉的型別,或者為空則返回”” 控制串. 
2.如果是數字,則修改單元格型別為String,然後返回String.這樣就保證數字不被格式化了. 
3. 雖然不知道這麼做有什麼後果,可是成功了. 
這裡寫圖片描述

相關文章