使用REST流式传输excel表

时间:2015-07-29 22:37:22

标签: apache-poi

我有一个使用REST API下载excel表的新要求。(导出所有数据)。我们正在使用内部UI框架,它将帮助我们使用REST API,它将来自浏览器。由于我处理大量数据,我们所考虑的方法就是这样,

  1. 创建SXSSFWorkbook
  2. final SXSSFWorkbook wb = new SXSSFWorkbook(100); Sheet sh = wb.createSheet();

    1. 使用批处理从DB获取数据并在Excel工作表中创建行。 (在while循环中,我们发出db查询以获取行列表。然后从列表中,我们在excel表单中创建行代码,下面显示了如何使用结果在excel中创建行和列)
    2. for ( List<Object> rowResults : allResultsData ) { row = sh.createRow(rowIndex++); cellIndex = 0; for ( Object columnData : rowResults ) { Cell cell = row.createCell(cellIndex++); cell.setCellValue(columnData != null ? columnData.toString() : null); } }

      1. 方法的返回类型是StreamingOutput。该工作簿将写入StreamingOutput的OutputStream
      2. return new StreamingOutput() { @Override public void write(OutputStream output) throws IOException, WebApplicationException { try { LOGGER.info("============= Going to start Streaming ============"); wb.write(output); } catch (Exception e) { e.printStackTrace(); throw new WebApplicationException(e); } finally { wb.dispose(); } } };

        上述方法适用于少量数据。我注意到Streaming只在创建整个excel文件后才开始。因此,当它拥有大量数据时,Streaming不会启动,直到创建整个excel(这需要一些时间)并且我们在浏览器中看到ERROR。

        我想知道我是否正确使用了API。此外,如果这些库不是为了这个目的,那么任何人都可以建议任何其他解决方案吗?我们可以使用任何库,以便我们可以从部分创建的Excel工作表开始流式传输。

        提前致谢,

        SD

0 个答案:

没有答案