使用cfspreadsheet阅读超过65536行Excel(93-97)工作表

您好我必须处理超过65536行的数据。 因此它被分成两个不同的Excel表格,分别命名为“Details”和“Details_1”。

基本上,发生的事情是上传Excel工作表,并使用“cfspreadsheet”来“读取”这些数据。 一旦读取这个插入到SQL表中。

我正在使用组件函数来读取这些1/2表。 这个想法是cfif从“cfspreadsheet”Query querycount()超过65533,然后读取第二张表。 然后使用QoQ和UNION ALL来创build一个联合查询(大多数情况下只有一个表,但在某些情况下,它是两个以上)。

它工作很好,直到一段时间。 然后突然停止工作。 我不确定错误/错误是否已经导致它停止。 以下是我的代码

<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)试图转储单个查询的Query1和Query2的每个表! 如果超过65536行IE页挂起无法读取表1和2。

b)我已经进行了error handling来捕获特定的错误,如“数据库”

c)当我减less65536以下的行数或删除与行数量较大的工作表。

正如我刚才所说,这是一个正在工作的代码,突然间一下子崩溃了。 **

也许这个问题是JVM的堆大小? 如果您的环境可以处理它,您可以尝试增加最大堆大小。

Interesting Posts