在Coldfusion中更快的电子表格替代scheme?

我正在尝试使用ColdFusion的spreadsheetaddrows函数来创buildExcel表。 因为我创build电子表格的表格可能非常大,所以我创build了大块的excel文件,以避免服务器超时。 一开始一切正常,但随着过程的进行,它真的变慢了。 例如,我正在testing一个有50,000多行和近100列的表格。 五个小时后,excel文件甚至还没有达到10000行。 = T

看来,电子表格的问题是根据谷歌的问题。 有没有更快,更好的方法来做到这一点?

<cfloop index="i" from="#start#" to="#end#" step="10"> <!-- variables --> <cfset plus = #i# + 9> <cfif #plus# gt #end#> <cfset plus = #end#> </cfif> <!-- /variables --> <!-- get i to i+9 records --> <cfquery name="query" datasource="datasource"> select * from ( select a.*, rownum rnum from ( select * from table order by id) a where rownum <= #plus# ) where rnum >= #i# </cfquery> <cfif it's the first time doing this> <!-- import from database query and save as excel sheet --> <cfset spreadsheetAddRows(theSheet, query)> <cfif reached the end of the query> <cfspreadsheet action = "write" overwrite = "true" filename = "file.xls" name="theSheet" > </cfif> <cfelseif 2nd or more time doing this> <!-- add new rows to excel object --> <cfset spreadsheetAddRows(temp, query)> <!-- overwrite existing xls file with new data --> <cfspreadsheet action="write" overwrite="true" filename="file.xls" name="temp" > </cfif> 

我很好奇,所以我尝试了另一种方法。 下面的代码用小数据集成功快速地执行。 对于你正在做的事情,这可能还是很慢,可能会造成Java堆空间的问题,但这可能值得一试。

首先 – 将查询结果存入电子表格。

 <cfquery name="dbdata" datasource="dw"> select query goes here </cfquery> <cfspreadsheet action="write" overwrite="yes" query="dbdata" filename="#completeFileName#"> 

然后阅读电子表格,做你必须做的,并更新文件。

 <cfscript> abc = spreadsheetread(completefilename); spreadsheetsetcellvalue(abc, 'new value', 2, 1); spreadsheetwrite(abc, completeFileName, true); </cfscript> 

当我在Excel中打开文件时,第1行有来自查询结果的列标题,单元格A2包含“新值”。