2012-11-12 2 views
15

데이터베이스가있는 웹 응용 프로그램 (ASP.NET)에서 작업하고 있습니다. 이 응용 프로그램을 통해 Excel 파일 (.xlsx)을 업로드하려고하면 문제가 없습니다. 이 문제는 파일이 24904 개가 넘는 레코드부터 시작됩니다.ASP.NET 응용 프로그램에서 MySQL로 Excel 파일을 업로드하는 중 오류가 발생했습니다.

나는 다음과 같은 오류가 그 시점에서

:

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

그것은 최초의 24,904 레코드를 기록합니다.

로드를 여러 배로 분할하려고 시도했지만 작동하지 않았습니다.

의견이 있으십니까?

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

나는 그것이 얼마나 많은 시간의 수의 경우

더 높은 번호로 루프 카운트를 시작 시도하고 참조 (추가 할 수있는 테이블의 매핑의 수 등) 엑셀 한도에 도달했습니다 의심 문제를 일으키는 데이터가 아니라이를 수행합니다. 아마 같은 것을 : 당신은 .... 카운터 변수를 추가하여 ...... 당신의 범위를 재설정 ... 특정 범위를 증가시키고 다시 설정할 수

Dim x As Integer = 40002 
Dim y As Integer = 60001 
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,...] 
0

제거 범위 사용 Sheet1의 및

(connExcel "[Sheet1의 $] SELECT * FROM") 새로운 System.Data.OleDb.OleDbDataAdapter으로 희미한 ODA를 다시 테스트 : 쿼리 구문은
0

엑셀 한도가 더 큽니다. 숨겨진 문자 나 공백이 포함 된 셀에 오류 범위가 명시된 범위를 벗어나면 오류 행의 '마지막'열 오른쪽에있는 열을 확인하십시오. 나는 그들이 뭔가를 가지고 있다고 생각할 것입니다.

쉽게 테스트 할 수있는 새로운 데이터로 가득 찬 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를 사용하거나 만들 수 많은 문제가 있기 때문에 엑셀하지 마십시오
관련 문제