正如您所发现的,使用 ColdFusion 的<cfspreadsheet/>
标签执行此操作会失败,因为它将整个文档构建在内存中,这会导致 JVM OutOfMemory 错误。你需要的是缓冲输出到磁盘的东西,这样你就不会耗尽内存。这表明 CSV 更容易缓冲。我想也有办法用 Excel 来做,但我不知道。
因此,您有两个选择:
- 使用 Java 库
- 使用 ColdFusion 的
fileOpen()
, fileWrite()
,fileClose()
方法
我将依次介绍每个。
Java 库
opencsv是我的偏好。这当然假设您知道如何在 ColdFusion 类路径上设置 .jar。如果你这样做了,那么使用它的 API 打开一个文件并为每一行指定数据是一个问题。这真的很简单。检查其文档以获取示例。
冷融合方法
请注意这里有龙。
如果您要导出不包含任何双引号或逗号的数字或字符串,您可能可以这样做。如果没有,首先要弄清楚要逃避什么以及为什么要使用图书馆。代码大致是这样的:
<!--- query to get whatever data you're working with --->
<cfset csvFile = fileOpen(filePath, 'read')>
<cfloop query="yourQuery">
<cfset csvRow = ""><!--- construct a csv row here from the query row --->
<cfset fileWrite(csvFile, csvRow)>
</cfloop>
<cfset fileClose(csvFile)>
如果您正在使用的查询数据也很大,您可能正在处理嵌套循环以将其分块。