SXSSFWorkbook的使用

SXSSFWorkbook 的优缺

只会保留固定大小数据在内存中,其它的数据都会写到磁盘里持久化,最后在输出,这样的话占用的内存就会很少。
有些复杂的样式会不生效,因此,更推荐使用easyExcel

代码

	public JSONObject testSXSSFWorkbook(HttpServletResponse res) {
		SXSSFWorkbook sxssfWorkbook = null;
		try {
			// 使用poi的 SXSSFWorkbook,他会把内存数据存入磁盘中,占用内存就小
			//SXSSFWorkbook 只会保留500条数据在内存中,其它的数据都会写到磁盘里,这样的话占用的内存就会很少
			// 这里要注意的是,如果你需要某些样式,必须使用XSSFWorkbook 先行设置,否则样式会不生效
			XSSFWorkbook xssfWorkbook = new XSSFWorkbook();
			XSSFSheet xssfSheet = xssfWorkbook.createSheet("0");
			// 设置 xssfSheet 的样式。
			// 创建 SXSSFWorkbook
			sxssfWorkbook = new SXSSFWorkbook(xssfWorkbook, 500);
			SXSSFSheet sxssfSheet = sxssfWorkbook.getSheetAt(0);
			List<String> testList = new ArrayList<>();
			testList.add("1111");
			testList.add("1111");
			testList.add("1111");
			// 设置 sxssfSheet 内容、样式等等,这里我们推荐进行数据库分页查询,一步步写入到sheet,这样数据库压力和应用内存占用会更加小。

			// 最后向客户端输出文件流
			sxssfWorkbook.write(res.getOutputStream());
		} catch (IOException e) {
			log.error("生成导出文件失败,错误信息", e);
		} finally {
			if (sxssfWorkbook != null) {
				sxssfWorkbook.dispose();// 释放workbook所占用的所有windows资源
			}
		}
		return null;
	}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
POI海量数据⼤数据⽂件⽣成 海量数据⼤数据⽂件⽣成SXSSFWorkbook使⽤简介 使⽤简介   在之前我们知道处理xls的excel⽤的workbook是HSSFWorkbook,处理xlsx的excel⽤的是XSSFWorkbook。   上⾯两个类导出excel的时候数据会驻留在内存中,所以当数据量⼤的时候容易造成内存溢出。SXSSFWorkbook是⽤来⽣成海 量excel数据⽂件,主要原理是借助临时存储空间⽣成excel。POI要求3.8以上,⽣成的⽂件格式要求是07及以上版本,因为excel07级以 上版本的⾏数1048576,量很⼤,⽽03版本的只有6万多。   读取07及以上版本的excel仍然是"XSSFWorkbook",写⼊则为"SXSSFWorkbook "。 导出的代码:(⼀个简单的测试,如果想封装⼯具类,参考:) package cn.xm.exam.utils; import java.io.File; import java.io.FileOutputStream; 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.xssf.streaming.SXSSFWorkbook; public class SXSSFExcelUtil { public static void main(String[] args) { String[] title = { "id", "name", "sex" }; // 创建⼀个⼯作簿 Workbook workbook = new SXSSFWorkbook(); // 创建⼀个⼯作表sheet Sheet sheet = workbook.createSheet(); // 创建第⼀⾏ Row row = sheet.createRow(0); // 创建⼀个单元格 Cell cell = null; // 创建表头 for (int i = 0; i < title.length; i++) { cell = row.createCell(i); cell.setCellValue(title[i]); } // 从第⼆⾏开始追加数据 for (int i = 1; i <= 10000; i++) { // 创建第i⾏ Row nextRow = sheet.createRow(i); // 参数代表第⼏列 Cell cell2 = nextRow.createCell(0); cell2.setCellValue("a" + i); cell2 = nextRow.createCell(1); cell2.setCellValue("user" + i); cell2 = nextRow.createCell(2); cell2.setCellValue("男"); } // 创建⼀个⽂件 File file = new File("G:/tt1.xls"); try { file.createNewFile(); // 打开⽂件流 FileOutputStream outputStream = new FileOutputStream(file); workbook.write(outputStream); outputStream.close(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } } 补充:SXFFSWoorkbook导出的excel相⽐于XSSFWoorkbook导出的更节省空间: 下⾯分别是SXXFS\XFFS\HFFS导出上⾯1万条数据的excel的⽂件⼤⼩: 补充:测试HSSF\XSSF导出的数据占⽤内存,⽽SXFFS导出的数据不容易造成内存溢出 数据改为5万条并且写⼊之后查看内存信息: (1)查看XSSF导出的时候占⽤JVM内存 package cn.xm.exam.utils; import java.io.File; import java.io.FileOutputStream; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.Row; import org.apache
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值