Apache POI 是用Java编写的免费开源的跨平台的 Java API,Apache POI提供API给Java程式对Microsoft Office格式档案读和写的功能。POI为“Poor Obfuscation Implementation”的首字母缩写,意为“简洁版的模糊实现”。简单来说POI就是用来批量操作数据的。
如何实现(SXSSFWorkbook)
POI中的SXSSFWorkbook(XSSF)类,XSSF类采用当数据加工时不是类似前面版本的对象,它可以控制excel数据占用的内存,他通过控制在内存中的行数来实现资源管理,即当创建对象超过了设定的行数,它会自动刷新内存,将数据写入文件,这样导致打印时,占用的CPU,和内存很少。
注意:XSSF类最多支持百万量级别的数据
下面是一个从数据库当中导出大量数据到Excel中的例子:
public void exportBigDataExcel(ValueDataDto valueDataDto, String path)
throws IOException {
// 最重要的就是使用SXSSFWorkbook,表示流的方式进行操作
// 在内存中保持100行,超过100行将被刷新到磁盘
SXSSFWorkbook wb = new SXSSFWorkbook(100);
Sheet sh = wb.createSheet(); // 建立新的sheet对象
Row row = sh.createRow(0); // 创建第一行对象
// -----------定义表头-----------
Cell cel0 = row.createCell(0);
cel0.setCellValue("1");
Cell cel2 = row.createCell(1);
cel2.setCellValue("2");
Cell cel3 = row.createCell(2);
cel3.setCellValue("3");
Cell cel4 = row.createCell(3);
// ---------------------------
List<valuedatabean> list = new ArrayList<valuedatabean>();
// 数据库中存储的数据行
int page_size = 10000;
// 求数据库中待导出数据的行数
int list_count = this.daoUtils.queryListCount(this.valueDataDao
.queryExportSQL(valueDataDto).get("count_sql"));
// 根据行数求数据提取次数
int export_times = list_count % page_size > 0 ? list_count / page_size
+ 1 : list_count / page_size;
// 按次数将数据写入文件
for (int j = 0; j < export_times; j++) {
list = this.valueDataDao.queryPageList(this.valueDataDao
.queryExportSQL(valueDataDto).get("list_sql"), j + 1,
page_size);
int len = list.size() < page_size ? list.size() : page_size;
<span style="white-space:pre"> </span> for (int i = 0; i < len; i++) {
Row row_value = sh.createRow(j * page_size + i + 1);
Cell cel0_value = row_value.createCell(0);
cel0_value.setCellValue(list.get(i).getaa());
Cell cel2_value = row_value.createCell(1);
cel2_value.setCellValue(list.get(i).getaa());
Cell cel3_value = row_value.createCell(2);
cel3_value.setCellValue(list.get(i).getaa_person());
}
list.clear(); // 每次存储len行,用完了将内容清空,以便内存可重复利用
}
FileOutputStream fileOut = new FileOutputStream(path);
wb.write(fileOut);
fileOut.close();
wb.dispose();
}
这样就可以从数据库中导出大量数据到Excel当中了