POI導出數據內存溢出問題《轉》


POI之前的版本不支持大數據量處理,如果數據過多則經常報OOM錯誤,有時候調整JVM大小效果也不是太好。3.8版本的POI新出來了SXSSFWorkbook,可以支持大數據量的操作,只是SXSSFWorkbook只支持.xlsx格式,不支持.xls格式。

3.8版本的POI對excel的導出操作,一般只使用HSSFWorkbook以及 SXSSFWorkbook, HSSFWorkbook用來處理較少的數據量, SXSSFWorkbook用來處理大數據量以及超大數據量的導出。
HSSFWorkbook的使用方法和之前的版本的使用方法一致,這里就不在陳述使用方法了
SXSSFWorkbook的使用例子如下:
import junit.framework.Assert;
import org.apache.poi.ss.usermodel.Cell;  
import org.apache.poi.ss.usermodel.Row;  
import org.apache.poi.ss.usermodel.Sheet;  
import org.apache.poi.ss.usermodel.Workbook;  
import org.apache.poi.ss.util.CellReference;  
import org.apache.poi.xssf.streaming.SXSSFWorkbook;  
public static void main(String[] args) throws Throwable {  
 Workbook wb = new SXSSFWorkbook(100); // keep 100 rows in memory, exceeding rows will be flushed to disk  
 Sheet sh = wb.createSheet();  
 for(int rownum = 0; rownum < 100000; rownum++){ 
 Row row = sh.createRow(rownum);  
 for(int cellnum = 0; cellnum < 10; cellnum++){  
 Cell cell = row.createCell(cellnum);  
 String address = new CellReference(cell).formatAsString();  
 cell.setCellValue(address); }  
 } 
FileOutputStream out = new FileOutputStream("/temp/sxssf.xlsx");  
 wb.write(out);  
 out.close(); 
}
 
以上是轉載的
 
值得注意的是SXSSFWorkbook只能寫不能讀。但是往往我們需要向一個Excel模版里導出數據,這樣才更好提前定義里面的格式和vba代碼。
這里就需要使用SXSSFWorkbook的另外一個構造函數:
SXSSFWorkbook(XSSFWorkbook workbook)
Construct a workbook from a template.
 
通過XSSFWorkbook來讀取模版,然后用SXSSFWorkbook來設置樣式和寫數據,詳細使用就參考API吧。
 
http://poi.apache.org/apidocs/org/apache/poi/xssf/streaming/SXSSFWorkbook.html


免責聲明!

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



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