2012-11-12 6 views
15

私はデータベースを使用してWebアプリケーション(ASP.NET)を作成しています。このアプリケーションでExcelファイル(.xlsx)をアップロードしようとすると問題はありません。この問題は、ファイルが24904レコードを超えると始まります。ASP.NETアプリケーションからMySQLにExcelファイルをアップロードする際にエラーが発生しました

This table contains cells that are outside the range of cells defined in this spreadsheet.

、それは最初の24904件のレコードを書き込み:私は次のエラーを取得するその時点で

複数のバッチで負荷を分割しようとしましたが、動作しませんでした。

どのような考えですか?

Dim connExcel As New System.Data.OleDb.OleDbConnection(conStr) 
Dim cmdExcel As New System.Data.OleDb.OleDbCommand() 
Dim dt As New DataTable() 
Dim dataset As New DataSet 
Dim x As Integer = 2 
Dim y As Integer = 20001 
Dim range As String = "A" + x.ToString + ":" + "I" + y.ToString 

cmdExcel.Connection = connExcel 

If erro = 0 Then 
    Try 

     For i As Integer = 0 To 50 
      connExcel.Open() 

      dataset.Reset() 
      dataset.Clear() 

      Dim oda As New System.Data.OleDb.OleDbDataAdapter("SELECT * FROM [Sheet1$" & range.ToString & "]", connExcel) 
      oda.TableMappings.Add("Table", "ExcelTest") 

      oda.Fill(dataset) 
      connExcel.Close() 

      If dataset.Tables(0).Rows.Count > 0 Then 
       SendToDB(dataset) 
      Else 
       i = 50 
      End If 

      x = x + 20000 
      y = y + 20000 

      range = "A" + x.ToString + ":" + "I" + y.ToString 
     Next 

     Label7.Visible = True 
     Label7.Text = "The information has been written successfully from 0 to " + y.ToString 

    Catch ex As Exception 
     Label9.Visible = True 
     Label9.Text = "Database Error 2:" + ex.Message 
     connExcel.Close() 
    End Try 
End If 
+1

エラーを発生させるのはどの行ですか? –

+4

行24905のデータに定義されたヘッダー列の外に余分なデータがないことを確認しましたか? – dhirschl

+0

dhirschl - 回線をチェックしたところ、変なことはありません。私はそれを削除し、次の行で同じ問題が発生しました –

答えて

0

私は

(あなたが追加することができ、テーブルのマッピングの数のような)は、Excelの制限をヒットしてきた疑いが高い数であなたのループカウントを開始してみて、それが何回のカウントだかどうかを確認します問題の原因となるデータではなく、これを実行します。たぶんのようなもの:あなたは....カウンタ変数を追加することにより、......あなたの範囲をリセット...特定の範囲のためにそれをインクリメントし、それをリセットすることができ

Dim x As Integer = 40002 
Dim y As Integer = 60001 
0

あなたはファイルクエリでLOAD DATAを使用してExcelファイルをデータベースにロードできます。クエリの構文は次のとおりです。...削除レンジ使用のSheet1

LOAD DATA [LOW_PRIORITY | CONCURRENT] [LOCAL] INFILE 'file_name' 
    [REPLACE | IGNORE] 
    INTO TABLE tbl_name 
    [CHARACTER SET charset_name] 
    [{FIELDS | COLUMNS} 
     [TERMINATED BY 'string'] 
     [[OPTIONALLY] ENCLOSED BY 'char'] 
     [ESCAPED BY 'char'] 
    ] 
    [LINES 
     [STARTING BY 'string'] 
     [TERMINATED BY 'string'] 
    ] 
    [IGNORE number LINES] 
    [(col_name_or_user_var,...)] 
    [SET col_name = expr,...] 
0

と新System.Data.OleDb.OleDbDataAdapterとして 点心のODAを再テスト( "[Sheet1の$] SELECT * FROM"、connExcel)

0

Excelの制限がそれより大きいです。隠し文字か空白のいずれかを含むセルに、エラーメッセージの状態として指定された範囲外にあるセルがある場合、エラー行の最後の列の右側の列をチェックします。私は彼らが何かを含んでいると思うでしょう。

新しいデータで満たされた50,000レコードの新しいファイルをテストする簡単な方法です。私はあなたがそれが動作すると思うでしょう。

エクセル

を読みながら

1

私はhttps://github.com/ExcelDataReader/ExcelDataReader

この

インストール・パッケージExcelDataReader

public static DataSet GetExcelDataSet(string filePath) 
    { 
     FileStream stream = File.Open(filePath, FileMode.Open, FileAccess.Read); 

     IExcelDataReader excelReader; 
     if (Path.GetExtension(filePath) == ".xls") 
     { 
      //Choose one of either 1 or 2 
      //1. Reading from a binary Excel file ('97-2003 format; *.xls) 
      excelReader = ExcelReaderFactory.CreateBinaryReader(stream); 
     } 
     else 
     { 
      //2. Reading from a OpenXml Excel file (2007 format; *.xlsx) 
      excelReader = ExcelReaderFactory.CreateOpenXmlReader(stream); 
     } 
     //Choose one of either 3, 4, or 5 
     //3. DataSet - The result of each spreadsheet will be created in the result.Tables 

     ////////DataSet result = excelReader.AsDataSet(); 

     //4. DataSet - Create column names from first row 
     excelReader.IsFirstRowAsColumnNames = true; 
     DataSet result = excelReader.AsDataSet(); 

     //5. Data Reader methods 
     //while (excelReader.Read()) 
     //{ 
     // //excelReader.GetInt32(0); 
     //} 

     //6. Free resources (IExcelDataReader is IDisposable) 
     excelReader.Close(); 
     return result; 
    } 
を試してみて、私はExcelDataReaderを使用OLDBを使用するか、その作成、多くの問題があるため優れてはいけません
関連する問題