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

  • 创建SXSSFWorkbook

final SXSSFWorkbook wb = new SXSSFWorkbook(100); Sheet sh = wb.createSheet();

  • 使用批处理从DB获取数据并在Excel工作表中创建行 . (在while循环中,我们发出db查询以获取行列表 . 然后从列表中,我们在excel表单代码中创建行,下面显示了如何使用结果在excel中创建行和列)

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); } }

  • 方法的返回类型是StreamingOutput . 该工作簿将写入StreamingOutput的OutputStream

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