您好我必须处理超过65536行的数据。因此它分为2个不同的Excel表格,分别命名为“Details”和“Details_1”。
基本上发生的事情是上传Excel表格,并使用“cfspreadsheet”来“读取”这些数据。 一旦读取,就会将其插入到SQL表中。
我正在使用组件功能来读取这些1/2张纸。想法是cfif查询来自“cfspreadsheet”的recordcount()超过65533,然后再读取第二张。然后使用QoQ和UNION ALL创建一个组合查询。(大多数情况下只有1张,但在某些情况下它超过2张。)
直到一段时间它一直很好。然后它突然停止了工作。我不确定错误/错误已经悄悄进入它导致它停止。以下是我的代码
<cftry>
<cfset fileEXCL = "#ExpandPath('../folder')#/#arguments.xclfile#" />
<!---when there e 2 Sheets --->
<!---get info from sheet1 as a "query1"--->
<cfspreadsheet action="read" src="#fileEXCL#" sheet="1" query="Query1" headerrow="1" />
<!--- recordcount for "sheet1" as "count1"--->
<cfset count1 =#Query1.recordcount#>
<!--- case when excel has more than 65533 rows
;THIS IMPLIES THAT THERE 2 SHEETS)--->
<cfif count1 gt 65533>
<!--- take info from sheet 2 as a "query2" and count as "count2"--->
<cfspreadsheet action="read" src="#fileEXCL#" sheet="2" query="Query2" headerrow="1" />
<cfset count2 =#Query2.recordcount#>
<!---club both query's using QoQ and call it "excelQuery"--->
<cfquery dbtype="query" name="excelQuery">
SELECT * FROM Query1
UNION ALL
SELECT * FROM Query2
</cfquery>
<!---total record count for "sheet1" & "sheet2"--->
<cfset rowCount =#excelQuery.recordcount#>
<cfelse>
<!---this case there is just 1 query "Query1" ;rename it "excelQuery"--->
<cfquery dbtype="query" name="excelQuery">
SELECT * FROM Query1
</cfquery>
<!--- recordcount for "sheet1"--->
<cfset rowCount =#excelQuery.recordcount#>
</cfif>
<cflog file="Collections" application="yes" text="#Session.user_info.uname# logged in. Data file #fileEXCL# read. Recordcount:#rowCount#" type="Information">
<cfset ins =insertUserLog("#Session.user_name#","#Session.user_code#","file #fileEXCL# read. ","Recordcount:#rowCount#","")>
<cfcatch type="any" >
<cflog file="Collections" application="yes" text="Error in reading Data file #fileEXCL#." type="Error">
<cfset ins =insertUserLog("#Session.user_name#","#Session.user_code#","error file","failed","#cfcatch.Message#")>
<cfreturn 1>
</cfcatch>
</cftry>
** 我做了以下事情: - a)尝试转储每个表单的Query的Query1和Query2! 如果超过65536行,IE页面会挂起 无法同时阅读第1页和第2页。
b)我已经处理了错误处理以捕获特定的错误,例如“数据库”
c)当我减少65536以下的行数或删除行数较多的工作表时,它可以工作。
正如我之前所说,这是一个正在运行的代码并且突然变成了kaput。 **
答案 0 :(得分:4)
也许问题在于JVM的堆大小?如果您的环境可以处理它,您可以尝试增加最大堆大小。