2013-12-20 7 views
1

У меня есть код, который работает для небольших наборов данных. Я получаю ошибку «из памяти» с огромными наборами данных, которые я использую (строки 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 
+0

EPplus - хорошее решение для этого. Ты это пробовал? Если вы используете объект excel в .net, то он определенно даст вам исключение из-за исключения. Лучше попробуйте использовать некоторую DLL с открытым исходным кодом. См. Ссылку http://epplus.codeplex.com/. вы можете понять, как это работает! Он использует файл шаблона, загруженный в ваш проект, и копирует его на новый и выгружает данные в новом файле excel. – rach

+0

Любые причины не использовать SSIS, который можно запустить из кода? –

ответ

3

Есть ли другой код, который управляет таблицей Excel? Если нет, скорее всего, будет проще просто записать это в текстовый файл в формате CSV. Excel откроет CSV и представит его как обычную электронную таблицу.

+0

на данный момент, нет нет. не могу сказать, что я знаю, как я буду экспортировать как csv, но я буду смотреть на это. – bheltzel

+1

Похоже, он ожидает (или допускает) несколько таблиц в наборе данных. Это означало бы несколько файлов csv, где excel мог бы сделать это все в одной книге. –

+0

@JoelCoehoorn да, что может быть так, я не был уверен в этом. Также может показаться, что в вашем коде есть потенциальная ошибка, если имеется более одного DataTable. Вы устанавливаете excelSheet в Nothing, но вы никогда не воссоздаете его после цикла. Сделайте несколько попыток поиска кода примера для записи CSV-файла из DataTable в VB.Net, вы найдете много. –

Смежные вопросы