【发布时间】:2013-12-20 20:31:08
【问题描述】:
我有一些适用于较小数据集的代码。我使用的大量数据集(800k 行,25 列)出现“内存不足”错误。我试图找出一种方法来将其更改为逐列批量导出,或者可能拆分多组行,而不是一次全部导出。
显然它无法处理那么多数据。我无法弄清楚如何将它分开一些。有任何想法吗?谢谢!
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 是很好的解决方案。你试过了吗?如果您在 .net 中使用 excel 对象,那么它肯定会给您带来内存不足的异常。最好尝试使用一些开源 dll。请参考链接epplus.codeplex.com。你可能会知道它是如何工作的!它使用您项目中上传的模板文件并将其复制到新的模板文件中并将数据表转储到新创建的excel文件中。
-
有什么理由不使用可以从代码运行的 SSIS?
标签: sql sql-server database vb.net excel