================================
©Copyright 蕃薯耀 2020-01-07
一、问题描述:
1、当使用WorkbookFactory.create 创建Excel时,其实创建的文档为Excel2003版的,最大容纳65536行数据,超出这个行数就是发生溢出。
WorkbookFactory.create(...);
2、当数据量大时,直接从数据库查询出来,内存不够也会溢出。
二、解决方案:
1、解决Excel2003行数溢出,使用XSSFWorkbook对象创建2007版的Excel,能容纳104万行数据。
具体如下:
Excel2003版最大行数是65536,Excel2007最大行数是1048576
Excel2003版最大列数是256,Excel2007最大列数是16384
XSSFWorkbook xSSFWorkbook = new XSSFWorkbook(new FileInputStream(excelTemplatePath));//使用模板文件
2、直接从数据库查询大批量数据导致内存溢出,可以使用分批次的方式查询数据,避免内存一下子暴掉。如要导出数据库100万条数据,每次取1万条,这样分100次取,每次取的数量自己可以定义,保证内存不溢出。
具体例子和代码:
/*** 导出excel文件
*@paramrequest
*@paramresponse
*@throwsException*/
public voidexportExcelFile(HttpServletRequest request,HttpServletResponse response){
Map map = new HashMap();;
FileOutputStream fileOutputStream= null;try{
Row row=parseRequestParametersToRow(request);
String projectPath=getRealPath(request);
String excelTemplatePath= projectPath +File.separator+ "template" + File.separator + "name" +File.separator+ "exportPlaceNameQueryExcelFile.xlsx";
File excelTemplateFile= new File(excelTemplatePath);//模板文件
File destFile= this.createDestExcelFile(request, excelTemp