15

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

その時点で、次のエラーが発生します。

このテーブルには、このスプレッドシートで定義されているセルの範囲外のセルが含まれています。

最初の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
4

6 に答える 6

1

Excelを読んでいるときに多くの問題が発生するため、OLDBまたはExcelは使用しません

私はExcelDataReaderを使用しています 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;
    }
于 2016-08-22T13:54:49.087 に答える
0

範囲をリセットできます...カウンター変数を追加することにより....特定の範囲でインクリメントします...そしてリセットします...

于 2014-03-14T10:36:27.947 に答える
0

Excel の制限 (追加できるテーブル マッピングの数など) に達したと思われます。

ループ カウントをより高い数値で開始してみて、問題の原因がデータではなく、これを実行した回数であるかどうかを確認してください。たぶん次のようなもの:

Dim x As Integer = 40002
Dim y As Integer = 60001
于 2013-01-17T21:06:33.503 に答える
0

Excel の制限はそれよりも大きくなります。指定された範囲外の非表示の文字またはスペースを含むセルがあります (エラー メッセージに示されているように)。エラー行の「最後の」列の右側にある列をチェックします。何かが含まれていることがわかると思います。

テストする簡単な方法は、新しいデータで満たされた 50,000 レコードの新しいファイルを作成することです。うまくいくと思います。

于 2016-05-13T11:21:44.740 に答える
0

範囲使用 Sheet1 を削除して ...Dim oda As New System.Data.OleDb.OleDbDataAdapter("SELECT * FROM [Sheet1$]", connExcel) を再テストします。

于 2015-11-28T05:17:29.580 に答える
0

また、ファイル クエリで LOAD DATA を使用して、Excel ファイルをデータベースにロードすることもできます。クエリの構文は次のとおりです。

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,...]
于 2015-07-02T09:24:58.970 に答える