Apache poi 使用REST流式处理excel工作表

Apache poi 使用REST流式处理excel工作表,apache-poi,Apache Poi,我有一个新的要求,使用RESTAPI下载excel工作表(导出所有数据)。我们正在使用一个内部UI框架,它将帮助我们使用RESTAPI,并且它将来自浏览器。因为我处理的是大量的数据,我们当时的想法是这样的 创建SXSSFWorkbook 最终SXSSFWorkbook wb=新SXSSFWorkbook(100); Sheet sh=wb.createSheet() 使用批处理从数据库获取数据,并在excel工作表中创建行。(在while循环中,我们发出db query以获取行列表。然后从列表中

我有一个新的要求,使用RESTAPI下载excel工作表(导出所有数据)。我们正在使用一个内部UI框架,它将帮助我们使用RESTAPI,并且它将来自浏览器。因为我处理的是大量的数据,我们当时的想法是这样的

  • 创建SXSSFWorkbook
  • 最终SXSSFWorkbook wb=新SXSSFWorkbook(100);
    Sheet sh=wb.createSheet()

  • 使用批处理从数据库获取数据,并在excel工作表中创建行。(在while循环中,我们发出db query以获取行列表。然后从列表中,我们在excel工作表中创建行-下面的代码显示了我如何使用结果在excel中创建行和列)
  • for(列出行结果:allResultsData){
    row=sh.createRow(rowIndex++);
    细胞指数=0;
    对于(对象列数据:行结果){
    Cell Cell=row.createCell(cellIndex++);
    cell.setCellValue(columnData!=null?columnData.toString():null);
    }
    }

  • 方法的返回类型为StreamingOutput。工作簿被写入StreamingOutput的OutputStream
  • 返回新的StreamingOutput(){
    @凌驾
    public void write(OutputStream output)引发IOException、WebApplicationException{
    试一试{
    LOGGER.info(“============================将开始流媒体=================”);
    写(输出);
    }捕获(例外e){
    e、 printStackTrace();
    抛出新的WebApplicationException(e);
    }最后{
    wb.dispose();
    }
    }
    };

    上述方法适用于少量数据。我注意到,只有在创建了整个excel文件之后,流媒体才会开始。所以,当数据量很大时,流式处理直到整个excel被创建(这需要一些时间)并且我们在浏览器中看到错误时才会开始

    我想知道我是否正确使用了API。此外,如果这些库不是用于此目的,那么有人能提出其他解决方案吗?是否有我们可以使用的库,以便我们可以从部分创建的excel工作表开始流式处理

    提前感谢,

    SD