Как вы обнаружили, выполнить это с тегом <cfspreadsheet/>
ColdFusion не удается, поскольку он создает весь документ в памяти, что приводит к ошибкам JVM OutOfMemory. Что вам нужно, это что-то, что буферизует вывод на диск, чтобы вам не хватило памяти. Это говорит о CSV, который гораздо проще буферизовать. Я думаю, что есть способы сделать это и в Excel, но я их не знаю.
Итак, два варианта для вас:
- использовать библиотеку Java
- используйте методы ColdFusion
fileOpen()
, fileWrite()
, fileClose()
Я покрою каждого по очереди.
Java Libary
opencsv - мои предпочтения. Это предполагает, конечно, что вы знаете, как настроить .jar на пути к классам ColdFusion. Если вы это сделаете, то это вопрос использования его API, чтобы открыть файл и указать данные для каждой строки. Это действительно довольно просто. Проверьте его документы для примеров.
ColdFusion Методы
Будьте предупреждены, здесь будут драконы .
Если вы экспортируете числа или строки, которые не содержат двойных кавычек или запятых, вы, вероятно, можете сделать это. Если нет, выясните, что нужно избегать и как, почему вы используете библиотеку в первую очередь. Код примерно такой:
<!--- 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)>
Если данные запроса, с которыми вы работаете, также велики, вы, возможно, имеете дело с вложенным циклом для его разделения.