gpt4 book ai didi

java - 当行数 > 10,000 时,jxls 文件生成永远挂起

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:52:47 25 4
gpt4 key购买 nike

我有一个生成的 Excel 报告。大多数情况下,当行数达到大约 2,000 时它工作正常。

今天早上,我试图生成一个包含 11,000 行的报告,但无法弄清楚为什么它会挂起,因为它遵循相同的未更改代码 - 见下文。除了 XLSTransformer 可能真的很慢之外,我还是想不通?

List<Map<String, Object>> maps = new ArrayList<Map<String, Object>>();
Map<String, Object> sheetData = null;
for(EntityForecastWrapper wrapper : wrappers) {
sheetName = Integer.toString(wrapper.getEntityId());
sheetNames.add(sheetName);
sheetData = new HashMap<String, Object>();
sheetData.put("wrapper", wrapper);
maps.add(sheetData);
}
Map<String, Object> beansMap = new HashMap<String, Object>();
Workbook workbook = null;
XLSTransformer transformer = new XLSTransformer();
try {
Logger.getLogger(getClass()).error("generating excel");
InputStream is = getClass().getResourceAsStream(getReportTemplate().getLabel());
workbook = transformer.transformMultipleSheetsList(is, maps, sheetNames, "map", beansMap, 0);
Logger.getLogger(getClass()).error("generated excel");
/*FileOutputStream fos = new FileOutputStream(new File(fileName));
workbook.write(fos);
fos.flush();
fos.close();*/
} catch(Exception e) {
Logger.getLogger(getClass()).error("Error writing excel data: ", e);
}

代码基本上不会从行中返回:

workbook = transformer.transformMultipleSheetsList(is, maps, sheetNames, "map", beansMap, 0);

当行数不大时(例如 500 到 1000 行),速度非常快。行内容永远不会改变,相同的列数...

有什么想法吗?

谢谢!

最佳答案

Jxls 尝试一次在 RAM 中构建整个文档。我快速浏览了 code并且看到,jxls 在内部使用 POI HSSFWorkbook - 没有流来帮助处理大量数据。

一个可能有效的解决方案是将数据分成更小的部分(在我的例子中为 ~1000 个条目)并在文件系统上临时保存 jxls 的输出。处理完所有数据后,使用 poi 合并文件。不是一个非常漂亮的解决方案...

关于java - 当行数 > 10,000 时,jxls 文件生成永远挂起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12205472/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com