У меня есть код, который работает для небольших наборов данных. Я получаю ошибку «из памяти» с огромными наборами данных, которые я использую (строки 800k, 25 столбцов). Я пытался найти способ изменить это на массовый экспорт столбца по столбцу или, возможно, разделить наборы строк, а не сразу на все.Массовый экспорт данных из SQL Server в Excel в VB
Очевидно, что он не может обрабатывать столько данных. Я не мог понять, как их отделить. Есть идеи? Благодаря!
For Each dt As System.Data.DataTable In ds.Tables
' Copy the DataTable to an object array
Dim rawData(dt.Rows.Count, dt.Columns.Count - 1) As Object
' Copy the column names to the first row of the object array
For col = 0 To dt.Columns.Count - 1
rawData(0, col) = dt.Columns(col).ColumnName
Next
' Copy the values to the object array
For col = 0 To dt.Columns.Count - 1
For row = 0 To dt.Rows.Count - 1
rawData(row + 1, col) = dt.Rows(row).ItemArray(col)
Next
Next
' Calculate the final column letter
Dim finalColLetter As String = String.Empty
Dim colCharset As String = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
Dim colCharsetLen As Integer = colCharset.Length
If dt.Columns.Count > colCharsetLen Then
finalColLetter = colCharset.Substring(_
(dt.Columns.Count - 1) \ colCharsetLen - 1, 1)
End If
finalColLetter += colCharset.Substring(_
(dt.Columns.Count - 1) Mod colCharsetLen, 1)
' Fast data export to Excel
Dim excelRange As String = String.Format("A1:{0}{1}", finalColLetter, dt.Rows.Count + 1)
excelSheet.Range(excelRange, Type.Missing).Value2 = rawData
excelSheet = Nothing
Next
EPplus - хорошее решение для этого. Ты это пробовал? Если вы используете объект excel в .net, то он определенно даст вам исключение из-за исключения. Лучше попробуйте использовать некоторую DLL с открытым исходным кодом. См. Ссылку http://epplus.codeplex.com/. вы можете понять, как это работает! Он использует файл шаблона, загруженный в ваш проект, и копирует его на новый и выгружает данные в новом файле excel. – rach
Любые причины не использовать SSIS, который можно запустить из кода? –