gpt4 book ai didi

excel - ColdFusion 电子表格内存问题

转载 作者:行者123 更新时间:2023-12-02 02:32:25 25 4
gpt4 key购买 nike

我正在使用 ColdFusion 将相当少的行(大约 1000)但大量的列(大约 300)导出到 Excel。它是一个多工作表 Excel 文件,其中至少有两个工作表具有大量列。使用cfspreadsheet抛出 Java 堆错误。更新 JVM 设置值没有显示任何改进。导出到 Excel 而不导致 Java 堆错误的最佳方法是什么?

编辑:我尝试了几种方法来解决程序中的问题。我使用 cfsavecontent 中的 xml 工作簿来构建多个工作表并使用 cfcontent 渲染结果。在这种情况下,cfcontent 可能会使用大量内存,从而导致堆空间错误。

<cfsavecontent variables="REQUEST.xmlData">
<cfoutput>
<xml version="1.0"?>
<?mso-application progid="Excel.sheet"?>
<Workbook>
...other contents
</Workbook>
</cfoutput>
</cfsavecontent>

对于第二种解决方法,我使用 querynew 构建内容并使用 <Cfspreadsheet action="write"> 将最终结果转储到 Excel 中。 。对于后续工作表,我使用 <cfspreadsheet action="update"> 。最终目标是使用 <cflocation url="excelPath"> 提供卓越服务,但在这种情况下,cfspreadsheet 更新永远会抛出内存不足错误。

如果更新 jvm 不可行,您建议采取哪些其他方法来克服内存问题。

最佳答案

我参加聚会有点晚了...

据我所知,cfspreadsheet 尝试在刷新到磁盘之前在内存中具体化整个文件。使用cfsavecontent,您可以明确地执行此操作。

您熟悉构建工作簿 XML,因此您的 cfsavecontent 方法所需的只是流式传输到磁盘。

这可以通过深入研究底层 Java 库来实现。 java.io.FileWriter可以追加到文件而不将整个文件保留在内存中:

var append = true;
var writer = createobject("java", "java.io.FileWriter").init(filename, append);
try {
writer.append("<xml version=""1.0""?>\n<?mso-application progid=""Excel.sheet""?>\n<Workbook>\n");
// Build your workbook in chunks
// for (var row in query)
// writer.append(markup)
writer.append("</Workbook>");
} finally {
writer.close();
}

根据测试,我相信 FileWriter 调用 flush定期,所以我省略了它,但我找不到任何文档说明这种情况。我从来没有见过内存使用率变得很高,但是 YMMV。

关于excel - ColdFusion 电子表格内存问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42800820/

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