HSSF是POI工程對Excel 97-2007 (.xls) 文件操作的純Java實現
XSSF是POI工程對Excel 2007 OOXML (.xlsx) 文件操作的純Java實現
從POI 3.8版本開始,提供了一種基於XSSF的低內存佔用的API----SXSSF
SXSSF實現了一套自動刷入數據的機制。當數據數量達到一定程度時(用戶可以自己設置這個限制)。像文本中刷入部分數據。這樣就緩解了程序運行時候的壓力。達到高效的目的。
二.百萬級數據高效導出EXCEL 方案
1.這種數據量的導出,肯定是異步的方式,將內存數據異步生成excel文件,存儲到服務器中(根據特定規則命名);
此過程採用 POI 3.8的 SXSSF 進行寫excel操作
2.從服務器下載excel文件
異步處理方式:
//根據條件拿到數據集
List<OrderBean> orderExportList = orderQueryService.getOrderList(orderSearchBean);
//創建線程池
int size = orderExportList.size();
int count = size / 5;
ExecutorService executorService = Executors.newFixedThreadPool(5);
//future存儲器
List<Future<List<OrderBean>>> futureList = new ArrayList<Future<List<OrderBean>>>();
//截取開啓5個線程分起任務完善信息
for (int i = 0; i < 5; i++)
{
int start = count * i;
int end = count * (i + 1);
if (i == 5 - 1)
{
end = size;
}
@SuppressWarnings("unchecked")
Future<List<OrderBean>> future = executorService.submit(new RunOrderThread(orderQueryService,
orderExportList.subList(start, end)));
// 每個異步計算的結果存放在future存儲器中
futureList.add(future);
}
//啓動異步計算結果輸出線程,該線程掃描異步計算Futrue的狀態,如果已經完成,則輸出異步計算結果
ExportThread export = new ExportThread(this, futureList, fileName, staffid);
Thread resultThread = new Thread(export);
resultThread.start();
SXSSF 方式寫excel: