Foros del Web » Programación para mayores de 30 ;) » .NET »

Exportar a Excel

Estas en el tema de Exportar a Excel en el foro de .NET en Foros del Web. Buen dia Algun componente que me recomienden para exportar DataGridView a Excel? VB.Net Gracias...
  #1 (permalink)  
Antiguo 22/05/2009, 18:43
 
Fecha de Ingreso: abril-2009
Mensajes: 30
Antigüedad: 15 años
Puntos: 0
Exportar a Excel

Buen dia


Algun componente que me recomienden para exportar DataGridView a Excel?
VB.Net


Gracias
  #2 (permalink)  
Antiguo 23/05/2009, 20:01
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Exportar a Excel

Componentes no hay, lo que hay son referencias que debes incluir en los proyectos. Eso si lo que quieres es manipular un documento de Excel en forma dinámica.
SI lo que quieres es enviar el contenido de un DataSet a un archivo de Excel, hay otras formas.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 24/05/2009, 06:51
Avatar de Carlojas  
Fecha de Ingreso: junio-2007
Ubicación: Shikasta
Mensajes: 1.272
Antigüedad: 16 años, 10 meses
Puntos: 49
Respuesta: Exportar a Excel

Que tal cestradah, mira este enlace hay explican claramente como hacerlo

Export DataGridView To Excel


Saludos.
__________________
"SELECT * FROM Mujeres WHERE situacion NOT IN ('CASADAS','CON HIJOS','ATORMENTADAS','CUASI-ENNOVIADAS') AND personalidad <> 'INTENSA'"
  #4 (permalink)  
Antiguo 24/05/2009, 09:51
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Exportar a Excel

El ejemplo de ese link es precisamente a lo que me refería al decir que hay que poner una referencia, que en este caso es el Microsft.Interop.Office.Excel.
Ahora bien, este componente .Net no es el que habitualmente está instalado en el sistema cuando tienes el MS Office (200, 2003 ó 2007) instalado. Sino el componente .Net que se descarga desde la web y que contiene las PIAs (Primary Interop Assemblies) de Microsoft.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 25/05/2009, 10:27
Avatar de jaullo  
Fecha de Ingreso: abril-2009
Mensajes: 994
Antigüedad: 15 años
Puntos: 30
Respuesta: Exportar a Excel

Checate esto

Function exporta()

Try
Dim RowsCount As Int32 = Me.dtgfactxc.SelectedRows.Count - 1

If RowsCount > -1 Then
'Arreglo para los nombres de campos.
Dim FldNames() As String = {"id", "auxiliar", "operador", "periodo", "factura", "nota", "monto_dolar", "monto_colon", "registrada", "num_liquidacion", "nota_interna", "orden_pago", "mes_liquidado", "monto_liquidado", "monto_pendiente", "fecha"}
'Arreglo para los datos seleccionados.
Dim DataArr(RowsCount, 15) As Object
Dim ColsCounter As Int32 = 0

'Populate the data array - The list is sorted in ascending order.
For RowsCounter As Int32 = 0 To RowsCount
For Each cell As DataGridViewCell In Me.dtgfactxc _
.SelectedRows(RowsCount - RowsCounter) _
.Cells
DataArr(RowsCounter, ColsCounter) = cell.Value
ColsCounter = ColsCounter + 1
Next
ColsCounter = 0
Next

'Populate the data array - The list is sorted in descending order.
'Dim Rows As Int32 = 0
'For Each row As DataGridViewRow In Me.DataGridView1.SelectedRows
'For Each cell As DataGridViewCell In Me.DataGridView1.SelectedRows(Rows).Cells
'DataArr(Rows, ColsCounter) = cell.Value
'ColsCounter = ColsCounter + 1
'Next
'ColsCounter = 0
'Rows = Rows + 1
'Next

'Variables for Excel.
Dim xlApp As New Excel.Application
Dim xlWBook As Excel.Workbook = xlApp.Workbooks.Add( _
Excel.XlWBATemplate.xlWBATWorksheet)
Dim xlWSheet As Excel.Worksheet = CType(xlWBook.Worksheets(1), Excel.Worksheet)
Dim xlCalc As Excel.XlCalculation

'Save the present setting for Excel's calculation mode and turn it off.
With xlApp
xlCalc = .Calculation
.Calculation = Excel.XlCalculation.xlCalculationManual
End With

'Write the field names and the data to the targeting worksheet.
With xlWSheet
.Range(.Cells(1, 1), .Cells(1, 16)).Value = FldNames
.Range(.Cells(2, 1), .Cells(RowsCount + 2, 16)).Value = DataArr
.UsedRange.Columns.AutoFit()
End With

With xlApp
.Visible = True
.UserControl = True
'Restore the calculation mode.
.Calculation = xlCalc
End With

'Sacar los elementos de memoria.
xlWSheet = Nothing
xlWBook = Nothing
xlApp = Nothing
GC.Collect()
End If
Catch ex As Exception
MessageBox.Show("Error al Tratar de exportar los datos", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try

End Function


Funciona perfectamente...
  #6 (permalink)  
Antiguo 25/05/2009, 18:10
 
Fecha de Ingreso: abril-2009
Mensajes: 30
Antigüedad: 15 años
Puntos: 0
Respuesta: Exportar a Excel

Que tal jaullo

Estaba checando la opcion que me das pero me quedo con la duda de que libreria hay que importar para manejar las variables de Excel, ya estuve buscando y no encuentro nada

De antemano, Gracias
  #7 (permalink)  
Antiguo 25/05/2009, 18:32
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Exportar a Excel

Es que lo que te propone jaullo es lo mismo que te puso Carlojas y lo mismo que te propuse yo: La librería es una de las PIAs (Primary Interop Assemblies) de Microsoft. Esa es la librería que permite instanciar objetos Excel o Word. No hay otra. No importa cuantas vueltas le des, cualquier ejemplo que busques en la web, sea en C#.Net o VB.Net requiere esa librería.
La tienes que descargar de la página web de MS,
Acá tienes los link de Microsoft:
Office XP PIAs
Office 2003 Update: Redistributable Primary Interop Assemblies
2007 Microsoft Office System Update: Redistributable Primary Interop Assemblies

Insisto: No pierdas tiempo buscando. TODOS los ejemplos en .NET usan una de estas tres PIA.
Descarga la que vaya a usar, instalala y luego ponla como referencia.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #8 (permalink)  
Antiguo 25/05/2009, 19:23
Avatar de jaullo  
Fecha de Ingreso: abril-2009
Mensajes: 994
Antigüedad: 15 años
Puntos: 30
Respuesta: Exportar a Excel

Bueno es cierto lo que dice gnzsoloyo la mayoria de ejemplos que encuentres instancian esta libreria. Microsoft.office.interop.excell

ahi muchas maneras de hacerlo, asi como te lo hemos mostrado hasta ahora importando la libreria o de esta otra forma.

'funcion exportar a excel
Sub exportaexcell()
Dim ApExcel As Object
ApExcel = CreateObject("Excel.application")
' Hace que Excel se vea
ApExcel.Visible = True
'Agrega un nuevo Libro
ApExcel.Workbooks.Add()
'Poner Titulos
ApExcel.cells(1, 1).formula = "Interesados"
ApExcel.cells(2, 1).Formula = txtnombre.Text
'cambiar la fuente
ApExcel.cells(1, 1).Font.Size = 12
ApExcel.cells(1, 2).Font.Size = 12
ApExcel.cells(1, 3).Font.Size = 12
ApExcel.cells(1, 4).Font.Size = 12
ApExcel.cells(1, 5).Font.Size = 12
ApExcel.cells(1, 6).Font.Size = 12

ApExcel.cells(1, 2).formula = "Código Cliente"
ApExcel.cells(2, 2).Formula = txtidclien.Text
ApExcel.cells(1, 3).formula = "Cédula Juridica"
ApExcel.cells(2, 3).Formula = txtcedjuridica.Text
ApExcel.cells(1, 4).formula = "Por Concepto de"
ApExcel.cells(2, 4).Formula = cboProducto.Text
ApExcel.cells(1, 5).formula = "Cantidad"
ApExcel.cells(2, 5).Formula = mktxtcantidad.Text
ApExcel.cells(1, 6).formula = "Total a Pagar"
ApExcel.cells(2, 7).Formula = txtfinal.Text
' Aplica Formula
'ApExcel.cells(3, 4).Formula = "=B3-C3"
' Hace una Seleccion de celdas y pone bordes de Color
ApExcel.RANGE("B3:D3").BORDERS.COLOR = RGB(255, 0, 0)
ApExcel = Nothing

End Sub
  #9 (permalink)  
Antiguo 25/05/2009, 19:41
 
Fecha de Ingreso: abril-2009
Mensajes: 30
Antigüedad: 15 años
Puntos: 0
Respuesta: Exportar a Excel

Si gnzsoloyo, disculpa me habia ido por otro asunto, y a final de cuentas el error lo estaba cometiendo yo al no agregar la referencia al proyecto.

Bueno, ahora se compila todo "bien" (sin errores), el problema es al ejecutar la funcion nunca me ejecuta Excel, estuve checando en el Task Manager y nisiquiera abre la aplicacion (de Excel). Que pudiera ser, por donde creen que le tenga que buscar?
  #10 (permalink)  
Antiguo 25/05/2009, 20:07
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Exportar a Excel

El manejo de un objeto Excel no significa que se abra el Excel, a menos que específicamente lo invoques. Por default, el objeto se genera como invisible, pero si abres el administrador de tareas, verás que está allí, en memoria.
Todo el asunto pasa por saber si lo que quieres es crear el documento y grabarlo solamente o crearlo y visualizarlo.
Presta atención a este segmento:
Código vb.net:
Ver original
  1. Dim oExcel = New Excel.Application
  2. oExcel.Visible = True
Eso es lo que hace al Excel visible. Si esa línea no está, el Excel no se abre, pero trabaja en background.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #11 (permalink)  
Antiguo 26/05/2009, 10:45
 
Fecha de Ingreso: abril-2009
Mensajes: 30
Antigüedad: 15 años
Puntos: 0
Respuesta: Exportar a Excel

Si, es a lo que me refiero, pense que era porque solo estaba creando el documento y guardandolo, pero no me aparece nisiquiera en el Administrador de Tareas cuando carga.
Y bueno suponiendo que asi es.... en que ruta me lo esta guardando? Donde cambio el codigo para darle la ruta a guardar del archivo?




Gracias
  #12 (permalink)  
Antiguo 26/05/2009, 11:21
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Exportar a Excel

En En el momento de guardar el archivo, además del nombre tienes que poner la ruta donde va a estar.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #13 (permalink)  
Antiguo 31/07/2009, 17:28
Avatar de frankjoel86  
Fecha de Ingreso: noviembre-2008
Ubicación: Ica
Mensajes: 295
Antigüedad: 15 años, 5 meses
Puntos: 0
Respuesta: Exportar a Excel

Saludos,
- Disculpen la intromisión y agradesco de antemano su ayuda, bueno tratare de ser lo mas claro y comprensible.
- luego de generar los datos con excel
- Al finalizar aparece un mensaje diciendo( DESEA VER EL REPORTE EN EXCEL) SI - NO


xlb.Save() 'GUARDAMOS EL LIBRO
If MsgBox("¿Desea ver el Reporte?", MsgBoxStyle.YesNo, " ..::Mensaje:: .") = MsgBoxResult.Yes Then
xla.Visible = True
Else

MsgBox("Proceso Terminado...!" & " Los Archivos se Encuentra en C:\Tasas\", MsgBoxStyle.Information, "Mensaje")
Utilitario.KillProcess("EXCEL.exe") 'MODULO QUE ELIMINA TODOS LOS EXCEL

End If
xls = Nothing
xlb = Nothing

- Cuando el mensaje pregunta ¿Desea ver el Reporte?, si lo doy en Si. El excel se visualizara trankilamente para el usuario, pero cuando el usuario cierra el excel. En la barra de tareas, en la ficha proceso. Este mismo excel se queda ejecutado. Esto genera problemas al abrir otros archivos con excel.
- Cuando el mensaje pregunta ¿Desea ver el Reporte?, le doy en No. Se muestra donde se guardan los Excel, y se ejecuta el modulo que elimina todos los excel.

En Resumen:
Como aria, cuando en el mensaje le doy que SI: el usuario observa el reporte y cuando cierre el excel, no se quede pegado en la barra de tareas.

Gracias de antemano por sus respuestas.
  #14 (permalink)  
Antiguo 31/07/2009, 23:33
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Exportar a Excel

Mira: Aún no lo he probado, pero se supone que los objetos Excel creados en memoria son instancias COM, por lo que se requiere el uso de la clase Marshall para destruirlos.
La idea sería liberarlos de modo que los garbage collectors puedan limpiar la memoria. Algo así:
Código vb.net:
Ver original
  1. System.Runtime.InteropServices.Marshal.ReleaseComObject(xlSheet)
  2. System.Runtime.InteropServices.Marshal.ReleaseComObject(xlBook)
  3. System.Runtime.InteropServices.Marshal.ReleaseComObject(oExcel)
El este caso se supone que estoy liberando los objetos en cada nivel (hoja, libro y aplicación).
Además de esto, yo estoy usando algunas veces un recurso algo rústico: capturo el objeto Process de Excel y luego directamente lo mato.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #15 (permalink)  
Antiguo 03/08/2009, 07:05
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Exportar a Excel

Bien, ya lo he comprobado (y de paso lo estoy implementando en mis aplicaciones):
Los objetos COM creados desde .Net usando alguna de las Interop de Office se deben desactivar por medio de la llamada a
Código VB.NET:
Ver original
  1. System.Runtime.InteropServices.Marshal.ReleaseComObject(objeto)
donde objeto es una instancia de interfase creada para usarlo (por ejemplo, Excel.Application o bien Excel.WorkBook).
El único detalle a tener en cuenta es que se debe ejecutar antes de liberar la variable, es decir:
Código VB.NET:
Ver original
  1. System.Runtime.InteropServices.Marshal.ReleaseComObject(objeto)
  2. objeto = Nothing
Caso contrario, no podrá encontrar el camino hacia el COM instanciado en la memoria.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #16 (permalink)  
Antiguo 03/08/2009, 07:24
Avatar de Dradi7  
Fecha de Ingreso: junio-2008
Ubicación: Peru - Lima
Mensajes: 1.518
Antigüedad: 15 años, 10 meses
Puntos: 220
Respuesta: Exportar a Excel

Ademas Siempre debemos tomar el cuenta el Recolector de Basura para poder eliminar dichas variables porque no necesariamente se van a borrar de la memoria.

Gc.Recollect()

luego de declarar la variable ojeto nothing

Código vb.net:
Ver original
  1. objeto = Nothing
  2. Gc.Recollect()
__________________
La clave de todo triunfador es eliminar todas sus excusas y sus limitaciones

Última edición por Dradi7; 03/08/2009 a las 09:03
  #17 (permalink)  
Antiguo 03/08/2009, 08:11
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Exportar a Excel

¡Cierto!

Gracias por el recordatorio. Me había olvidado de mencionarlo...
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 21:52.