Ошибка загрузки файла Excel из приложения ASP.NET в MySQL
Я работаю над веб-приложением (ASP.NET) с базой данных MySQL. Когда я пытаюсь загрузить файл 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
Ответы
Ответ 1
Я не использую OLDB или excel, так как он создает много проблем при чтении excel
Я использую ExcelDataReader https://github.com/ExcelDataReader/ExcelDataReader
Попробуйте
Install-Package 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;
}
Ответ 2
Я подозреваю, что вы достигли предела Excel (например, количество отображаемых табличных сопоставлений)
Попробуйте запустить счетчик циклов с более высоким номером и посмотрите, сколько раз вы делаете это, а не данные, вызывающие проблему. Может быть, что-то вроде:
Dim x As Integer = 40002
Dim y As Integer = 60001
Ответ 3
вы можете reset ваш диапазон...... путем добавления переменной счетчика.... увеличивать его для определенного диапазона... и reset it...
Ответ 4
Вы также можете использовать 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,...]
Ответ 5
Удалить диапазон использования Sheet1... и повторить проверку
Dim oda As New System.Data.OleDb.OleDbDataAdapter( "SELECT * FROM [Sheet1 $]", connExcel)
Ответ 6
Предел Excel больше. У вас есть ячейки, содержащие скрытые символы или пробелы, которые выходят за пределы указанного диапазона (как указано в сообщении об ошибке) проверяют столбцы справа от вашего последнего столбца в строках ошибок. Я думаю, вы обнаружите, что они что-то содержат.
Простой способ тестирования, создать новый новый файл с 50 000 записями, заполненный новыми данными. Я думаю, вы найдете, что это работает.