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