花费很长时间使用POI生成excel文件

时间:2015-12-08 10:54:01

标签: java excel

在我的项目中,我想生成一个包含85列的Excel文件,行数将逐日增加。

现在我有大约6K的记录。生成文件时,它总是给我Java堆空间异常。

我的堆空间设置是

  

-Xmx2048M

     

-Xmx6144M

我的代码是

HSSFWorkbook workbook = new HSSFWorkbook();
HSSFSheet sheet = workbook.createSheet("FIELD OPERATIONS TRACKER");

for (int i=0; i < list.size(); i++)
{
 HSSFRow rowHeader = sheet.createRow(i);

 HSSFCell cell = rowHeader.createCell(0);
 cell.setCellValue(list.get(i).getName());

 cell = rowHeader.createCell(1);
 cell.setCellValue(list.get(i).getSeason());

//like this  I have 85 columns here
}

请帮助我改善表现

2 个答案:

答案 0 :(得分:1)

如果要创建.xlsx文件而不是.xls文件,只需使用新的SXSSFWorkbook()替换新的HSSFWorkbook()

Workbook wb = new SXSSFWorkbook();

Apache POI的工作人员做得很好。只需使用接口而不是HSSFCell和HSSFRow等特定类。

项目中需要两个依赖项:

<dependency>
  <groupId>org.apache.poi</groupId>
  <artifactId>poi</artifactId>
  <version>${apache.poi.version}</version>
</dependency>

<dependency>
  <groupId>org.apache.poi</groupId>
  <artifactId>poi-ooxml</artifactId>
  <version>${apache.poi.version}</version>
</dependency>

答案 1 :(得分:0)

Constant.MAX_ROW_IN_MEMORY = 1000; //设置为1000的常量

SXSSFWorkbook workBook =新的SXSSFWorkbook(Constant.MAX_ROW_IN_MEMORY); workBook.setCompressTempFiles(true);

尝试使用一个参数构造函数创建excel文件。并将setCompressTempFiles设置为true。在单个excel中成功编写2个Lakh记录,且内存少于1 GB。