Exportar a Excel un gran volumen de datos de forma rápida

4592 vistas

El siguiente código permite exportar de forma rápida los datos de una consulta o un procedimiento almacenado hacia una hoja Excel. Es interesante si el volumen de información a exportar es grande (millares de líneas). Tendremos que añadir la referencia "Microsoft Excel 11.0 Object Library".



csharp
  1. using Microsoft.Office.Interop;
  2.  
  3.   // en un clic de un botón por ejemplo
  4.   Excel.Application xlApp;
  5.  
  6.   try
  7.   {
  8.   xlApp = GetObject(, "excel.application")
  9.   }
  10.   catch(Exception )
  11.   {
  12.   xlApp = new Excel.Application();
  13.   }
  14.   finally
  15.   {
  16.   xlApp.Visible = false;
  17.   }
  18.  
  19.   // añadimos una página
  20.   Excel.Worksheet xsTransfert = xlApp.Workbooks.Add.ActiveSheet;
  21.  
  22.   try
  23.   {
  24.   // creamos cadena de conexión
  25.   // (en el ejemplo a SQL Server)
  26.   xsTransfert.QueryTables.Add(Connection:= _
  27.     "ODBC;DRIVER=SQL Server;SERVER= Nombre_Server;Integrated
  28. Security=SSPI;" & _
  29.     "APP=Microsoft® Query;DATABASE= Nombre_BD;Trusted_Connection=Yes", _
  30. Destination:=xsTransfert.Range("A1"))
  31.     .CommandText = "Nombre_Stored_Procedure" // o consulta SELECT
  32.     .Name = "nombre_hoja_excel"
  33.     .FieldNames = True
  34.     .RowNumbers = True
  35.     .FillAdjacentFormulas = False
  36.     .PreserveFormatting = True
  37.     .RefreshOnFileOpen = False
  38.     .BackgroundQuery = True
  39.     .RefreshStyle = Excel.XlCellInsertionMode.xlOverwriteCells
  40.     .SavePassword = False
  41.     .SaveData = False
  42.     .AdjustColumnWidth = True
  43.     .RefreshPeriod = 0
  44.     .PreserveColumnInfo = True
  45.     .Refresh(BackgroundQuery:=False)
  46.  
  47.   // lo mostramos
  48. xlApp.Visible = true;
  49. catch(Exception ex)
  50. {
  51.   MessageBox.Show(ex.Message);
  52. }