java 解析excel


分析

解析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. 雖然不知道這么做有什么后果,可是成功了. 
這里寫圖片描述

 

注:需要導入的jar包:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM