excel 大文件解析原理實現


 問題

目前的excel 不像之前的excel了可以支持的數據量更大,可以支持支持1048576行,16384列。

之前使用poi讀取,直接報錯,使用excel 事件的方式讀取,還有不少的bug,關鍵是程序寫的很復雜。

 

解決方案

我們知道excel 文件實際上是一個壓縮包來的,我們將excel 直接改名為rar或zip文件。

我們可以將文件解壓出來。

我們可以看到excel 實際上是一堆xml文件的集合。

worksheets 中實際存了 這個excel的sheets數據。

但是excel 在存數據的時候,他會將字符串數據存在在sharedString.xml 文件中。

sharedString.xml 文件數據如下:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<sst
    xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" count="6" uniqueCount="4">
    <si>
        <t>guangzhou</t>
    </si>
    <si>
        <t>beijing</t>
    </si>
    <si>
        <t>hujun</t>
    </si>
    <si>
        <t>c</t>
    </si>
</sst>

這個數據存放了字符串的數據。

sheet 表文件也是一個xml文件,格式如下圖:

我們查看xml文件可以得知。

 

 這里0,1,2,3 存的是 sharedString.xml 字符串的下標。

數字和日期型數據是直接存放在sheets 數據中的。

日期型數據的存儲有些特殊

比如這個 他的日期實際是 2019-5-29日,這個是怎么計算的呢,他實際是從1900-0-0 開始加上43614天。

因此 明白了excel的結構 ,我們就很容易去實現讀excel的代碼,可以繞開poi哪些api。

直接讀取xml。

 

實現思路

1.將文件解壓。

2.讀取sharedString.xml 將數據讀取到list列表。

3.讀取sheet.xml文件數據,遍歷這個數據,將字符串的數據,去上面的列表中查找,其他類型的數據直接在sheet.xml 中讀取。

 


免責聲明!

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



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