Pregunta: | 45524 - COMO EXPORTAR DATAGRID A EXCEL |
Autor: | Pablo Saya Báez |
Hola, necesito ayuda para exportar a excel los datos de un datagrid.
El datagrid es cargado mediante un dataset. Si alguien podría darme una mano, se lo agradezco, ya que soy un aficionado a la programación y estoy terminando una aplicación, pero me falta este detalle más que importante. Gracias a todos |
Respuesta: | Javier Brizuela |
http://www.recursosvisualbasic.com.ar/htm/trucos-codigofuente-visual-basic/174-exportar-dbgrid-excel.htm |
Respuesta: | Sebastian Santoro |
Hola Pablo, vi que pudiste resolver el tema de la exportación. Traté de hacerlo como vos pero me tira un error, capaz que me podes dar una mano.
cuando le doy al boton que dice Exportar en mi aplicación me tira el siguiente error en la siguiente linea: myTable = CType(DataGrid1.DataSource, DataTable) ERROR: "Excepción no controlada del tipo 'System.InvalidCastException' en Reportes.exe Información adicional: La conversión especificada no es válida." Un abrazo. |
Respuesta: | Pablo Saya Báez |
Encontré lo que buscaba, aquí les va el código completo:
Dim xlApp As New Excel.Application Dim xlBook As Excel.Workbook Dim xlSheet As Excel.Worksheet Dim variable As String Dim fila, Columna, numcol, x As Integer Dim myTable As DataTable Dim FilaExcel As Integer = 2 Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click xlBook = CType(xlApp.Workbooks.Add, Excel.Workbook) xlSheet = CType(xlBook.Worksheets(1), Excel.Worksheet) Try Me.Cursor = Cursors.WaitCursor myTable = CType(DataGrid1.DataSource, DataTable) 'obtengo la estructura del datagrid numcol = myTable.Columns.Count ' el doc de excel tiene 4 columnas para este e jemplo''''''''''''''''''' For x = 1 To numcol xlSheet.Cells(1, x).Font.Bold = True xlSheet.Cells(1, x).Font.Size = 11 xlSheet.Cells(1, x).Font.Name = "Arial" Next For fila = 0 To myTable.Rows.Count - 1 ' numero de filas For Columna = 0 To myTable.Columns.Count - 1 ' numero de columnas xlSheet.Cells(1, Columna + 1).value = myTable.Columns(Columna).ColumnName If IsNumeric(DataGrid1.Item(fila, Columna).ToString) Then variable = Convert.ToString(DataGrid1.Item(fila, Columna)) ElseIf IsNumeric(DataGrid1.Item(fila, Columna).ToString) Then variable = Convert.ToString(DataGrid1.Item(fila, Columna)) ElseIf IsDate(DataGrid1.Item(fila, Columna).ToString) Then variable = Convert.ToString(Microsoft.VisualBasic.Format(DataGrid1.Item(fila, Columna), "Short Date")) ' convierte la fecha en formato 22/11/77 ElseIf IsDBNull(DataGrid1.Item(fila, Columna).ToString) Then variable = "" Else variable = Convert.ToString(DataGrid1.Item(fila, Columna)) End If xlSheet.Cells(FilaExcel, Columna + 1).value = variable Next FilaExcel += 1 Next xlSheet.Columns.AutoFit() 'Se exporta la hoja Excel cargada en el objeto oExcel a un archivo .XLS Dim SaveDialog = New SaveFileDialog SaveDialog.DefaultExt = "*.xls" SaveDialog.Filter = "(*.xls)|*.xls" If SaveDialog.ShowDialog = DialogResult.OK Then Try xlSheet.SaveAs(SaveDialog.FileName) Me.Cursor = Cursors.Default MessageBox.Show("Documento Guardado Como : " & SaveDialog.FileName, "Información", MessageBoxButtons.OK, MessageBoxIcon.Information) xlBook.Close() xlApp.Quit() xlApp = Nothing Catch ex As Exception MessageBox.Show("No se Puede Procesar, El Archivo puede que se encuentre abierto, Verifique") End Try End If Catch ex As System.NullReferenceException MsgBox(ex.Message) Me.Cursor = Cursors.Default Exit Sub End Try End Sub NOTA: La exportación a excel se realiza muy lentamente si los registros son grandes. Ej: Una planilla de 2000 registros demora 15 minutos en ser exportada a excel. hay otra solución, pero se las dejo para que investiguen. CONSEJO: Lean mucho sobre enlaze de datos. Un abrazo a todos. |