Java讀取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. 雖然不知道這麼做有什麼後果,可是成功了. 
這裏寫圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章