首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用cfspreadsheet读取超过65536行的Excel (93-97)表

使用cfspreadsheet读取超过65536行的Excel (93-97)表
EN

Stack Overflow用户
提问于 2013-08-15 12:42:19
回答 1查看 682关注 0票数 0

嗨,我必须处理超过65536行的数据。因此,它出现在两个不同的Excel表中,分别命名为"Details“和"Details_1”。

基本上发生的就是上传Excel表格,并使用"cfspreadsheet“来”读取“这些数据。一旦读取,它就被插入到SQL表中。

我正在使用组件函数来读取这1/2张纸。想法是cfif Query recordcount () from "cfspreadsheet“大于65533,然后也读取第二张表。然后使用QoQ和UNION ALL创建一个组合查询(大多数情况下只有一个工作表,但在某些情况下会超过两个工作表)。

它在一段时间内工作得很好。然后它突然停止工作了。我不确定是否有错误/错误潜入其中,导致它停止。以下是我的代码

代码语言:javascript
复制
<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)我已经设置了错误处理来捕获特定的错误,如“数据库”

c)当我将行数减少到65536以下或删除行数较多的工作表时,它可以工作。

正如我之前所说的,这是一个正在工作的代码,但突然之间就崩溃了。**

EN

回答 1

Stack Overflow用户

发布于 2013-08-16 00:24:57

也许问题出在JVM的堆大小上?如果您的环境能够处理,您可以尝试增加最大堆大小。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18246447

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档