1. 描述
對於大數據量導出報表時,可能會出現如下兩種情況:一,導出成功,數據會顯示在多個 sheet 中;二,導出失敗,導出的 Excel 内容無效。那麽爲什麽會出現如上問題呢。
2. 沒有啓用行式引擎的大數據量報表導出
在沒有啓用行式引擎的情況下,會出現兩種情況:服務器可以承受的情況下導出成功,服務器無法承受的情況下導出失敗,下面我們分别看下其和結果:
2.1 服務器承受範圍内
可以承受的範圍是:數據量大,超過了 Excel 的最大行數但不是非常非常大,比如10萬條,且數據不複雜,在内存足夠且網絡沒有斷的情況下可以正常導出。
導出的結果
超出 Excel 最大行或列的數據會在下一個 sheet 中顯示。
注:Excel 的行數和列數是有限制的,如 Excel2003 其行數最大限制爲 65536 行,列數最大限制爲 256 列。
2.2 服務器無法承受
無法承受的範圍是:數據量大,且非常大,比如幾十萬幾百萬甚至更多,可能因爲内存等的限制而出現導出失敗。
導出的結果
打開導出失敗的 Excel,其内容是無效的。
2.3 兩種導出結果的原因
其主要在於數據量與數據複雜程度(列數)究竟有多大,在沒有用行引擎的情況下就會有一個臨界點,低於臨界點的時候可以導出成功即導出的内容有多個 sheet,否則導出失敗,内容無效。
3. 啓用行式引擎的大數據量報表導出
對於大數據量報表,通常使用 行式引擎 來展現,這種情況下,導出 Excel 始終成功。
3.1 導出的結果
啓用行式引擎的大數據量報表導出Excel時,是将其分成多個.xls文件,且是以一個壓縮包文件的格式傳輸到客戶端的。
3.2 示例
情形 1:大數據量報表如 100w 行數據,設置行式引擎,每頁顯示 30 行
導出結果爲:共 41 個 Excel,前 40 個 Excel 每個 24990 行,最後一個 Excel 爲 400 行,41 個 Excel 壓縮爲 zip 包傳到客戶端下載。
情形 2:大數據量報表如 100w 行數據,設置行式引擎,每頁顯示 50 行
導出結果爲:共 40 個 Excel,每個 Excel 包含 25000 條數據,40 個 Excel 壓縮爲 zip 包傳到客戶端下載。