我有一个使用REST API下载excel表的新要求。(导出所有数据)。我们正在使用内部UI框架,它将帮助我们使用REST API,它将来自浏览器。由于我处理大量数据,我们所考虑的方法就是这样,
final SXSSFWorkbook wb = new SXSSFWorkbook(100);
Sheet sh = wb.createSheet();
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);
}
}
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