SXSSFWorkbook.write() 多次调用失败
SXSSFWorkbook.write() fails when called more than once
有什么办法可以分几次把workbook写到outputStream中吗?或者解决方法?
while(rs.next()) {
Row row = sh.createRow(rowNum++);
//set cell values.....
if(rowNum % 500 == 0) wb.write(out);
}
从this forum看来,SXSSFWorkbook 似乎不支持像这样重复使用工作簿。
我正在尝试查询数据库并使用工作簿将结果写回 Excel 文件。
我的web应用结构是:浏览器-Apache-服务器-数据库。
问题是,如果数据集很大,有时需要很长时间才能完成整个工作簿。因此,Apache 将在服务器写回响应之前断开与服务器的连接。
如果没有其他更好的解决方案,我想我将不得不在服务器上保存一个临时文件,并让浏览器不断检查进程。最后下载文件。
[编辑]
我没有使用CSV的原因是我对excel文件有一些格式要求。为此目的,工作簿对我来说是最直接的工具。(不确定 CSVwriter 是否也可以格式化 ecel)。
我认为是数据库查询过程消耗了时间。这就是为什么我想在从数据库中获取数据的同时将数据写回客户端。
将评论提升为答案:
if(rowNum % 500 == 0) wb.write(out);
这不会像您预期的那样工作,也不会有用。 Excel 文件格式(.xls
和 .xlsx
)不是可追加的文件格式。只能一次写完所有文件。
如果您将工作簿写到一个文件中,然后再将它的另一个副本写到同一个文件中,这将不起作用。然后,您将在一个文件中得到两个工作簿,这是不受支持的
如果您真的想在生成时保存一个类似 Excel 的文件,您需要使用 CSV。 CSV 是可流式传输和可追加的
如果没有,一次性生成整个文件,然后发送给客户端。如果需要,发送 0 字节(可能是分块的)"hello, still here" 响应写入直到你完成。
但是,使用 Apache POI 编写一个非常大的电子表格最多只需要几秒钟,时间不足以使连接超时。如果花费的时间比这更长,则问题可能不在 Apache POI 中,而在您的代码中。请参阅 this Apache POI FAQ entry 测试 POI 独立性能,这样您就可以了解是您自己的代码出了什么问题
有什么办法可以分几次把workbook写到outputStream中吗?或者解决方法?
while(rs.next()) {
Row row = sh.createRow(rowNum++);
//set cell values.....
if(rowNum % 500 == 0) wb.write(out);
}
从this forum看来,SXSSFWorkbook 似乎不支持像这样重复使用工作簿。
我正在尝试查询数据库并使用工作簿将结果写回 Excel 文件。
我的web应用结构是:浏览器-Apache-服务器-数据库。
问题是,如果数据集很大,有时需要很长时间才能完成整个工作簿。因此,Apache 将在服务器写回响应之前断开与服务器的连接。
如果没有其他更好的解决方案,我想我将不得不在服务器上保存一个临时文件,并让浏览器不断检查进程。最后下载文件。
[编辑]
我没有使用CSV的原因是我对excel文件有一些格式要求。为此目的,工作簿对我来说是最直接的工具。(不确定 CSVwriter 是否也可以格式化 ecel)。
我认为是数据库查询过程消耗了时间。这就是为什么我想在从数据库中获取数据的同时将数据写回客户端。
将评论提升为答案:
if(rowNum % 500 == 0) wb.write(out);
这不会像您预期的那样工作,也不会有用。 Excel 文件格式(.xls
和 .xlsx
)不是可追加的文件格式。只能一次写完所有文件。
如果您将工作簿写到一个文件中,然后再将它的另一个副本写到同一个文件中,这将不起作用。然后,您将在一个文件中得到两个工作簿,这是不受支持的
如果您真的想在生成时保存一个类似 Excel 的文件,您需要使用 CSV。 CSV 是可流式传输和可追加的
如果没有,一次性生成整个文件,然后发送给客户端。如果需要,发送 0 字节(可能是分块的)"hello, still here" 响应写入直到你完成。
但是,使用 Apache POI 编写一个非常大的电子表格最多只需要几秒钟,时间不足以使连接超时。如果花费的时间比这更长,则问题可能不在 Apache POI 中,而在您的代码中。请参阅 this Apache POI FAQ entry 测试 POI 独立性能,这样您就可以了解是您自己的代码出了什么问题