現在、Excelで大量のデータを処理しており、データ型が混在するVB.NetのDataTable(30列あたり70,000行)にアップロードしたいと考えています。
次のコードを使用して情報をインポートしています。
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
しかし、VB.Netは私に次のエラーを与えます:
プロバイダーACE.OLEDB.12.0の最大容量を知っている人はいますか?または、この問題をどのように修正しますか?
参考までに、これはSQL選択文です。
SELECT * FROM [Workflow data$A1:AC70276]
行を20000(SELECT * FROM [Workflow data $ A1:AC20000])に制限すると、プロセスは正常に機能することに注意してください。