0

こんにちは、65536 行を超えるデータを処理する必要があります。したがって、「Details」と「Details_1」という名前の 2 つの異なる Excel シートになります。

基本的に何が起こっているかは、Excel シートをアップロードし、「cfspreadsheet」を使用してこのデータを「読み取る」ことです。これを読み取ると、SQL テーブルに挿入されます。

コンポーネント関数を使用して、これらの 1/2 シートを読み取ります。アイデアは、「cfspreadsheet」からの cfif Query recordcount() が 65533 を超えている場合、2 番目のシートも読み取ることです。次に、QoQ と UNION ALL を使用して複合クエリを作成します。

それはしばらくの間うまくいきました。その後、突然動作しなくなりました。停止の原因となっている間違った/エラーが侵入したかどうかはわかりません。以下は私のコードです

<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 未満に減らすか、行数が多いシートを削除すると機能します。

先に言ったように、それは機能していたコードでしたが、突然機能しなくなりました。**

4

1 に答える 1