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