Exportar Datagridview a Excel
Hola, amigos esta entrega se trata de exportar el contenido de un Datagridview a excel. Muchas de las aplicaciones necesitan pasar los datos calculados a instancias de hojas electronica en Excel. Este ejemplo primeramente hacemos la referencia Net a Microsoft.Office.Interop.Excel, en mi caso a la version 12( o que es la de Excel 2010).
Veamos una captura:
Luego hacemos la generacion de datos en la grid(Código antes visto en mis anteriores entregas):
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'GENERAR Y RELLENAR EL DATAGRIDVIEW
Try
Dim n As Integer = 6 ' cualquier valor para sumar
Dim cantidad(n) As Integer 'matriz para almacenar hasta n valores
Dim valor As Double = 0.18 'valor de un articulo en común ....para ejemplificar
Dim subtotal(n) As Double ' matriz que almacena los subtotales de cada compra
Dim suma As Double 'total de la suma de la columna subtotal
For i As Integer = 0 To n - 1
cantidad(i) = i 'Val(InputBox("Ingresar cantidad Nº" & i + 1)) 'Entrada manual
Next
For i As Integer = 0 To n - 1
subtotal(i) = cantidad(i) * valor
suma = suma + subtotal(i)
Next
grid1.Rows.Add(n + 1) 'numero de filas del grid
For r As Integer = 0 To n - 1
grid1.Item(0, r).Value = r + 1
grid1.Item(1, r).Value = Format(cantidad(r), "0.00")
grid1.Item(2, r).Value = Format(valor, "0.00")
grid1.Item(3, r).Value = Format(subtotal(r), "0.00")
grid1.Item(2, n).Value = "TOTALES="
grid1.Item(3, n).Value = Format(suma, "0.00")
Next
Catch ex As KeyNotFoundException
MessageBox.Show("Error de concurrencia:" & vbCrLf & ex.Message)
End Try
End Sub
Luego el código sobre El boton Exportar de Excel:
Private Sub BtnExcel_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnExcel.Click
'Crer dataset para exportar
Dim dset As New DataSet
'add table to dataset
dset.Tables.Add()
'agregar columnas a la tabla
For i As Integer = 0 To grid1.ColumnCount - 1
dset.Tables(0).Columns.Add(grid1.Columns(i).HeaderText)
Next
'agregar filas a la tabla
Dim dr1 As DataRow
For i As Integer = 0 To grid1.RowCount - 1
dr1 = dset.Tables(0).NewRow
For j As Integer = 0 To grid1.Columns.Count - 1
dr1(j) = grid1.Rows(i).Cells(j).Value
Next
dset.Tables(0).Rows.Add(dr1)
Next
Dim excel As New Microsoft.Office.Interop.Excel.ApplicationClass
Dim wBook As Microsoft.Office.Interop.Excel.Workbook
Dim wSheet As Microsoft.Office.Interop.Excel.Worksheet
wBook = excel.Workbooks.Add()
wSheet = wBook.ActiveSheet()
wSheet.Name = "Ejemplo"
Dim dt As System.Data.DataTable = dset.Tables(0)
Dim dc As System.Data.DataColumn
Dim dr As System.Data.DataRow
Dim colIndex As Integer = 0
Dim rowIndex As Integer = 0
For Each dc In dt.Columns
colIndex = colIndex + 1
excel.Cells(1, colIndex) = dc.ColumnName
Next
For Each dr In dt.Rows
rowIndex = rowIndex + 1
colIndex = 0
For Each dc In dt.Columns
colIndex = colIndex + 1
excel.Cells(rowIndex + 1, colIndex) = dr(dc.ColumnName)
Next
Next
wSheet.Columns.AutoFit()
excel.Visible = True
End Sub
Si ejecutamos veremos que se abre un hoja de Excel, y los datos exportados de la grid. Bueno amigos espero seguir exponiendoles codigo importantes como exportar a pdf, html, etc. Nos vemos!!
Mi ejemplo: https://docs.google.com/open?id=0B-UGWA03tc5ZcFphWFhuYXg2cWc
Si quieres agregar el formato(colores celdas,fuente, etc) de la Datagridview a la exportacion en Excel entra a la parte 2 en este post: http://jossm03.blogspot.com/2013/11/exportar-datagridview-excel-ii.html
Veamos una captura:
Luego hacemos la generacion de datos en la grid(Código antes visto en mis anteriores entregas):
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'GENERAR Y RELLENAR EL DATAGRIDVIEW
Try
Dim n As Integer = 6 ' cualquier valor para sumar
Dim cantidad(n) As Integer 'matriz para almacenar hasta n valores
Dim valor As Double = 0.18 'valor de un articulo en común ....para ejemplificar
Dim subtotal(n) As Double ' matriz que almacena los subtotales de cada compra
Dim suma As Double 'total de la suma de la columna subtotal
For i As Integer = 0 To n - 1
cantidad(i) = i 'Val(InputBox("Ingresar cantidad Nº" & i + 1)) 'Entrada manual
Next
For i As Integer = 0 To n - 1
subtotal(i) = cantidad(i) * valor
suma = suma + subtotal(i)
Next
grid1.Rows.Add(n + 1) 'numero de filas del grid
For r As Integer = 0 To n - 1
grid1.Item(0, r).Value = r + 1
grid1.Item(1, r).Value = Format(cantidad(r), "0.00")
grid1.Item(2, r).Value = Format(valor, "0.00")
grid1.Item(3, r).Value = Format(subtotal(r), "0.00")
grid1.Item(2, n).Value = "TOTALES="
grid1.Item(3, n).Value = Format(suma, "0.00")
Next
Catch ex As KeyNotFoundException
MessageBox.Show("Error de concurrencia:" & vbCrLf & ex.Message)
End Try
End Sub
Luego el código sobre El boton Exportar de Excel:
Private Sub BtnExcel_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnExcel.Click
'Crer dataset para exportar
Dim dset As New DataSet
'add table to dataset
dset.Tables.Add()
'agregar columnas a la tabla
For i As Integer = 0 To grid1.ColumnCount - 1
dset.Tables(0).Columns.Add(grid1.Columns(i).HeaderText)
Next
'agregar filas a la tabla
Dim dr1 As DataRow
For i As Integer = 0 To grid1.RowCount - 1
dr1 = dset.Tables(0).NewRow
For j As Integer = 0 To grid1.Columns.Count - 1
dr1(j) = grid1.Rows(i).Cells(j).Value
Next
dset.Tables(0).Rows.Add(dr1)
Next
Dim excel As New Microsoft.Office.Interop.Excel.ApplicationClass
Dim wBook As Microsoft.Office.Interop.Excel.Workbook
Dim wSheet As Microsoft.Office.Interop.Excel.Worksheet
wBook = excel.Workbooks.Add()
wSheet = wBook.ActiveSheet()
wSheet.Name = "Ejemplo"
Dim dt As System.Data.DataTable = dset.Tables(0)
Dim dc As System.Data.DataColumn
Dim dr As System.Data.DataRow
Dim colIndex As Integer = 0
Dim rowIndex As Integer = 0
For Each dc In dt.Columns
colIndex = colIndex + 1
excel.Cells(1, colIndex) = dc.ColumnName
Next
For Each dr In dt.Rows
rowIndex = rowIndex + 1
colIndex = 0
For Each dc In dt.Columns
colIndex = colIndex + 1
excel.Cells(rowIndex + 1, colIndex) = dr(dc.ColumnName)
Next
Next
wSheet.Columns.AutoFit()
excel.Visible = True
End Sub
Si ejecutamos veremos que se abre un hoja de Excel, y los datos exportados de la grid. Bueno amigos espero seguir exponiendoles codigo importantes como exportar a pdf, html, etc. Nos vemos!!
Mi ejemplo: https://docs.google.com/open?id=0B-UGWA03tc5ZcFphWFhuYXg2cWc
Si quieres agregar el formato(colores celdas,fuente, etc) de la Datagridview a la exportacion en Excel entra a la parte 2 en este post: http://jossm03.blogspot.com/2013/11/exportar-datagridview-excel-ii.html
eres grandee!!!
ResponderEliminargracias.!!
ResponderEliminares muy bueno brother exelente
ResponderEliminarGracias si me sirvio pero sera posible que se puedan pasar los datos con el diseño que tenga establecido en el datagrid en viaual basic????? es decir con colores de filas, etc
ResponderEliminarMe da un erro con defino Microsoft.Office.Interop.Excel.ApplicationClass
ResponderEliminary los demas soy nuevo porfa te lo agradeceria...
hola que tal tienes que hacer la referencia a la libreria de excel tienes que ir elmenu proyecto---ir a Agregar referencia
Eliminary buscar microsoft.Office.Interop.excel y dar aceptar
Hola, ya agregue la libreria y me dio error en
ResponderEliminarDim excel As New Microsoft.Office.Interop.Excel.ApplicationClass
En vez de usar Microsoft.Office.Interop.Excel.ApplicationClass usa Microsoft.Office.Interop.Excel.Application y con eso se soluciona el problema
ResponderEliminarExcelente tu reespuesta. Codigo al 100. Saludos
Eliminargracias
EliminarExcelente aporte.
ResponderEliminarEstimado, como serÃa si el grid tubiera solo datos alfanumericos, me explico: que tan solo tubiera 3 columnas con datos que son string ,ejemplo;columna 1 (usuario), columna 2(perfil),columna 3 (clave).
ResponderEliminarquiero exportar esa informacion de un grid a excel.
Ayudeme gran maestro.
hola que tal vi tu pregunta y te digo que necesitas en este caso ingresar los datos fisicamente en la grid desde unos textbox mas o menos, o conectado desde una base de datos al fin la grid solamente muestra datos ya sean conectados o no pero esa es la forma. Espero la hayas captado si no escribeme mi correo jossm04@gamil.com.Sin embargo intentaré hacer un ejercicio explicado y lo anexo
EliminarQue buenos aportes¡¡¡¡ saludos desde Quetzaltenango, Guatemala
ResponderEliminarmuchÃsimas gracias!!!
ResponderEliminarQDTB
=)
Hola me queda con error estas tres lineas
ResponderEliminarDim excel As New Microsoft.Office.Interop.Excel.ApplicationClass
Dim wBook As Microsoft.Office.Interop.Excel.Workbook
Dim wSheet As Microsoft.Office.Interop.Excel.Worksheet
dice por ejemplo en la primera "'applicatioclass' es ambiguo en el espacio de nombre de Microsoft.office.interop.excel"
hola que tal, lo que puedes hacer ante esos problemas es referencia la libreia de Excel, a veces esto pasa cuando el office instalado en la compu es 2010 o 2013
Eliminarlla ma a la libreria
Microsoft Excel 15.0 Object Library para office 2013 y 14.0 para la version 2010
Recuerda borra los imports y hace la referencia en la pestaña COM
Eliminarelimine los imports, agregue la referencias excel 12.0 y continua el error. estoy utilizando vb 2010
Eliminarme sale este error: Al control DataGridView no se puede agregar ninguna fila que no tenga columnas. Las columnas se deben agregar primero.
ResponderEliminarNo se como estará estructurado tus datos pero para exportar primero tienes que diseñar la grid con sus columnas como prefieras o si esta conectada a una data es más fácil porque la grid adquiere la estructura del dataset descarga mi ejm para quiste fijes bien del resto seguro lo intuiras
EliminarGenial Excelente aporte
ResponderEliminarEn versiones anteriores, cuando insertavas un data te aparecian por defaul herramientas muy necesarias como es el agregar, eliminar y algunas otras para navegar entre registros, Pregunta ¿Sabes como colocarlas nuevamente por defaul en VB 2012?
ResponderEliminarte podria decir que han desaparecido esa opciones poruqe no son practicas imagina que tines 35.400 registros estas en 5to seria bien dificil desplazarte con esas herramientas
ResponderEliminarBuen punto, tienes mucha razon Arismendy
EliminarYO SI PUEDO EXPORTAR PERO EN LA MAQUINA DONDE ESTOY HACIENDO EL PROGRAMA PERO CUANDO LO PASO A OTRA MAQUINA NO ME EXPORTA ME SALE UN ERROR
ResponderEliminarDeberias incluir la librerÃa de excel que se referencia en el instalador o portable
EliminarDeberias incluir la librerÃa de excel que se referencia en el instalador o portable
Eliminartoy leyendo el código, no entiendo que hace el
ResponderEliminarDim blnFileOpen As Boolean = False
Try
Catch ex As Exception
blnFileOpen = False
End Try
excel.Visible = True
como que si estuviera asociado con un OpenFileDialog
tienes razón, estuve tratando de agregar un poco mas de código para que haga otras funciones y creo se me quedo disculpas a todos y gracias por la observación, buena observacion
EliminarGracias desde El Salvador, este codigo meayudo mucho.
ResponderEliminarsaludos Nación hermana, saludos
Eliminar