Visual Basic Importieren von Excel-Arbeitsblatt zu DataTable
Derzeit arbeite ich mit einer riesigen Menge von Daten in Excel, und ich möchte, hochgeladen in eine DataTable in VB.Net (bei 70.000 Zeilen pro 30 Spalten) mit gemischten Datentypen.
Bin ich mit dem nächsten code zum importieren der Informationen:
Public Function mc_ExcelTableToDataTable(ByRef ExcelApp As Excel.Application, _
ByVal SheetName As String, _
ByVal TableName As String, _
Optional ByVal FilePath As String = "", _
Optional ByVal SQLsentence As String = "") As DataTable
Dim vPath As String
Dim vCloseExcelWorkbook As Boolean = False
If ExcelApp.ActiveWorkbook IsNot Nothing Then
vPath = IIf(FilePath = "", ExcelApp.ActiveWorkbook.FullName, FilePath)
Else
vPath = FilePath
End If
If SQLsentence = "" And ExcelApp.ActiveWorkbook Is Nothing Then
vCloseExcelWorkbook = True
ExcelApp.Workbooks.Open(vPath)
End If
Dim vRange As String = ExcelApp.Sheets(SheetName).ListObjects(TableName).Range.AddressLocal
vRange = vRange.Replace("$", "")
Dim vCNNstring As String = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
"Data Source= " & vPath & ";" & _
"Extended Properties=""Excel 8.0;HDR=YES;IMEX=1"""
Dim ExcelCNN As System.Data.OleDb.OleDbConnection = New System.Data.OleDb.OleDbConnection(vCNNstring)
Dim vSQL As String = IIf(SQLsentence = "", _
"SELECT * FROM [" + SheetName + "$" & vRange & "]", _
SQLsentence)
Dim ExcelCMD As System.Data.OleDb.OleDbDataAdapter = New System.Data.OleDb.OleDbDataAdapter(vSQL, ExcelCNN)
ExcelCNN.Open()
Dim ExcelDS As System.Data.DataSet = New DataSet
ExcelCMD.Fill(ExcelDS)
mc_ExcelTableToDataTable = ExcelDS.Tables(0).Copy
ExcelCMD = Nothing
ExcelCNN.Close()
ExcelDS.mc_Dispose()
If vCloseExcelWorkbook Then ExcelApp.ActiveWorkbook.Close(False)
GCcleaner()
End Function
Aber, VB.Net geben Sie mir die folgende Fehlermeldung:
Jemand weiß, was ist die maximale Kapazität der Anbieter ACE.OLEDB.12.0?
Oder wie man dieses Problem lösen?
FYI, dies ist der SQL-select-Satz:
SELECT * FROM [Workflow data$A1:AC70276]
Ist es wichtig zu erwähnen, dass, wenn ich die Grenze der Zeilen zu 20000 (SELECT * FROM [Daten des Workflow$A1:AC20000]), wird der Prozess funktioniert!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hmmm....habe gehört, dass es kann, in einigen Fällen, ein altes Artefakt-Stil, Fehler in der ass.OLEDB.12.0-Treiber, so dass Abfragen in Excel-Tabellen über 60000 Zeilen generieren kann seltsame Fehler wie diesen hier...und zwar kann ich dies bestätigen mir selbst, ich kann mir nicht helfen, aber Frage mich, was passieren würde, wenn Sie änderungen an Ihrer Auswahl der Größe der ol' 65536 Zeilen-limit im alten Excel -, oder, etwas +/- 5%), wenn der Fehler wäre Weg. Seine besonders neugierig, dass Sie versucht, es mit 20000 Zeilen und es anscheinend geklappt.
BEARBEITEN ich haben zusammen geworfen einige vergleichbare C# - code zum testen dieses Szenarios, und können nur das Abfragen der Annäherung an diese Größe erstellen inkonsistente Fehler, angefangen von "System resource exceeded" zu hängt "OutOfMemoryExceptions." Ich kann zwar nicht sagen, ich habe gesehen, Ihren genauen Fehler, ich würde sagen dieses Verhalten ist ab der Steuer den Import Prozess, so dass unerwünschte, wenn nicht unvorhersehbares Verhalten entstehen können. Ich würde vorschlagen, brechen die Daten in kleinere Stücke, wenn möglich.
Glück.
scheint, ich habe eine Lösung gefunden für das problem.
Grundsätzlich habe ich entfernt die Reihe. In den aktuell ausgewählten Satz, den ich verwendet:
Habe ich ersetzt, durch den nächsten Satz: