お気づきのように、ColdFusion の<cfspreadsheet/>
タグを使用してこれを行うと、ドキュメント全体がメモリ内に構築され、JVM OutOfMemory エラーが発生するため失敗します。必要なのは、メモリ不足にならないように、出力をディスクにバッファリングするものです。これは、バッファリングがはるかに簡単な CSV を示唆しています。Excelでも同様の方法があると思いますが、知りません。
したがって、2 つのオプションがあります。
- Java ライブラリを使用する
- ColdFusion の
fileOpen()
、fileWrite()
、fileClose()
メソッドを使用する
それぞれを順番に説明します。
Java ライブラリ
私の好みはopencsvです。これはもちろん、ColdFusion クラスパスに .jar を設定する方法を知っていることを前提としています。その場合は、その 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)>
作業しているクエリ データも大きい場合は、ネストされたループを処理してチャンクアウトしている可能性があります。