You are on page 1of 13

240 - Exportar un Flexgrid a Excel Ejemplo 1 - Exportar a un nuevo libro

Ejemplo que exporta el contenido de una grilla de tipo MsFlexGrid o MsHFlexGrid a una hoja de clculo Excel exisitente. Controles

Colocar en un Formulario un Hierarchical Flexgrid o el Flexgrid v6. clsico Un botn Especificar en el parmetro la ruta donde se deber crear el libro

Option Explicit

' ----------------------------------------------------------------------------------' \\ -- Autor : Luciano Lodola -- http://www.recursosvisualbasic.com.ar/ ' \ -- Agregar la Referencia a Microsoft Excel Object Library ' -----------------------------------------------------------------------------------

' ------------------------------------------------------------------------------------------' \\ -- Botn para importar datos en un nuevo libro ' ------------------------------------------------------------------------------------------Private Sub Command1_Click() If Exportar_Excel(App.Path & "\libro1.xls", MSHFlexGrid1) Then MsgBox " Datos exportados en " & App.Path, vbInformation End If End Sub ' ------------------------------------------------------------------------------------------' \\ -- Inicio ' ------------------------------------------------------------------------------------------Private Sub Form_Load() ' -- cargar grid con valores With MSHFlexGrid1 .AllowUserResizing = flexResizeColumns .FixedCols = 0 .Rows = 2 ' -- Setear Encabezados y aadir filas .FormatString = "Meses|Gastos" Dim i As Integer Randomize For i = 1 To 11 .AddItem MonthName(i) & vbTab & FormatCurrency(Rnd * 1000, 2) Next .RemoveItem 1 .ColWidth(0) = 2000 .ColWidth(1) = 2000 End With

Command1.Caption = " Exportar a Excel " End Sub ' ------------------------------------------------------------------------------------------' \\ -- Funcin para crear un nuevo libro con el contenido del Grid ' ------------------------------------------------------------------------------------------Public Function Exportar_Excel(sOutputPath As String, FlexGrid As Object) As Boolean

On Error GoTo Error_Handler

Dim o_Excel Dim o_Libro Dim o_Hoja Dim Fila

As Object As Object As Object As Long As Long

Dim Columna

' -- Crea el objeto Excel, el objeto workBook y el objeto sheet Set o_Excel = CreateObject("Excel.Application") Set o_Libro = o_Excel.Workbooks.Add Set o_Hoja = o_Libro.Worksheets.Add

' -- Bucle para Exportar los datos With FlexGrid For Fila = 1 To .Rows - 1 For Columna = 0 To .Cols - 1 o_Hoja.Cells(Fila, Columna + 1).Value = .TextMatrix(Fila, Columna) Next Next End With

o_Libro.Close True, sOutputPath ' -- Cerrar Excel o_Excel.Quit ' -- Terminar instancias Call ReleaseObjects(o_Excel, o_Libro, o_Hoja) Exportar_Excel = True Exit Function

' -- Controlador de Errores Error_Handler: ' -- Cierra la hoja y el la aplicacin Excel If Not o_Libro Is Nothing Then: o_Libro.Close False If Not o_Excel Is Nothing Then: o_Excel.Quit Call ReleaseObjects(o_Excel, o_Libro, o_Hoja) If Err.Number <> 1004 Then MsgBox Err.Description, vbCritical End Function ' ------------------------------------------------------------------' \\ -- Eliminar objetos para liberar recursos ' ------------------------------------------------------------------Private Sub ReleaseObjects(o_Excel As Object, o_Libro As Object, o_Hoja As Object) If Not o_Excel Is Nothing Then Set o_Excel = Nothing If Not o_Libro Is Nothing Then Set o_Libro = Nothing If Not o_Hoja Is Nothing Then Set o_Hoja = Nothing End Sub

Ejemplo 2 - Exportar a un libro que ya existe y a una hoja concreta


En esta otra rutina, que es similar a la anterior, en ves de exportar los datos del Grid en un nuevo libro, se importan los datos en un libro que ya existe. para ello en ves de utilizar el mtodo Add del objeto Workbook, utiliza el mtodo Open para abrirlo. Cdigo fuente en el form, con un Hierarchical flex y un botn. ( Indicar la ruta del libro en el primer parmetro de la funcin )

Option Explicit

' ----------------------------------------------------------------------------------' \\ -- Autor : Luciano Lodola -- http://www.recursosvisualbasic.com.ar/ ' \ -- Agregar la Referencia a Microsoft Excel Object Library ' -----------------------------------------------------------------------------------

' ------------------------------------------------------------------------------------------' \\ -- Botn para importar datos desde el Grid hacia la hoja en un libro exisitente ' ------------------------------------------------------------------------------------------Private Sub Command1_Click() If Exportar_Excel("c:\Nuevo Microsoft Excel Worksheet.xls", MSHFlexGrid1) Then MsgBox " Datos exportados ", vbInformation End If End Sub ' ------------------------------------------------------------------------------------------' \\ -- Inicio ' ------------------------------------------------------------------------------------------Private Sub Form_Load()

' -- cargar grid con valores With MSHFlexGrid1 .AllowUserResizing = flexResizeColumns .FixedCols = 0 .Rows = 2 ' -- Setear Encabezados y aadir filas .FormatString = "Nombre de Producto|Precio del producto" .AddItem "Producto 1" & vbTab & FormatCurrency("14,31", 2) .AddItem "Producto 1" & vbTab & FormatCurrency("17,32", 2) .AddItem "Producto 1" & vbTab & FormatCurrency("11,36", 2) .AddItem "Producto 1" & vbTab & FormatCurrency("16,34", 2) .AddItem "Producto 1" & vbTab & FormatCurrency("18,16", 2) .AddItem "Producto 1" & vbTab & FormatCurrency("52,36", 2) .RemoveItem 1 End With Command1.Caption = " Exportar a Excel " End Sub ' ------------------------------------------------------------------------------------------' \\ -- funcin para psar los datos hacia una hoja de un libro exisitente ' ------------------------------------------------------------------------------------------Public Function Exportar_Excel(sBookFileName As String, FlexGrid As Object, Optional sNameSheet As String = vbNullString) As Boolean

On Error GoTo Error_Handler

Dim o_Excel Dim o_Libro Dim o_Hoja Dim Fila

As Object As Object As Object As Long

Dim Columna

As Long

' -- Error en la ruta del libro If sBookFileName = vbNullString Or Len(Dir(sBookFileName)) = 0 Then

MsgBox " Falta el Path del archivo de Excel o no se ha encontrado el libro en la ruta especificada ", vbCritical Exit Function End If

' -- Crea el objeto Excel, el objeto workBook y el objeto sheet Set o_Excel = CreateObject("Excel.Application") Set o_Libro = o_Excel.Workbooks.open(sBookFileName) ' -- Comprobar si se abre la hoja por defecto, o la indicada en el parmetro de la funcin If Len(sNameSheet) = 0 Then Set o_Hoja = o_Libro.Worksheets(1) Else Set o_Hoja = o_Libro.Worksheets(sNameSheet) End If ' -- Bucle para Exportar los datos With FlexGrid For Fila = 1 To .Rows - 1 For Columna = 0 To .Cols - 1 o_Hoja.Cells(Fila, Columna + 1).Value = .TextMatrix(Fila, Columna) Next Next End With ' -- Cerrar libro y guardar los datos

o_Libro.Close True ' -- Cerrar Excel o_Excel.Quit ' -- Terminar instancias Call ReleaseObjects(o_Excel, o_Libro, o_Hoja) Exportar_Excel = True Exit Function

' -- Controlador de Errores Error_Handler: ' -- Cierra la hoja y el la aplicacin Excel If Not o_Libro Is Nothing Then: o_Libro.Close False If Not o_Excel Is Nothing Then: o_Excel.Quit Call ReleaseObjects(o_Excel, o_Libro, o_Hoja) MsgBox Err.Description, vbCritical End Function ' ------------------------------------------------------------------' \\ -- Eliminar objetos para liberar recursos ' ------------------------------------------------------------------Private Sub ReleaseObjects(o_Excel As Object, o_Libro As Object, o_Hoja As Object) If Not o_Excel Is Nothing Then Set o_Excel = Nothing If Not o_Libro Is Nothing Then Set o_Libro = Nothing If Not o_Hoja Is Nothing Then Set o_Hoja = Nothing End Sub

128 - Leer un rango de datos de Excel e importarlo a un control FlexGrid Importar a un Flexgrid datos desde Excel
Esta rutina es lo que hace es abrir una hoja de clculo Excel y recorrer mediante un bucle un rango de celdas y a medida que se recorren , mostrar esos datos en un control FlexGrid o Microsoft Hierarchical FlexGrid , para importarlos. En el ejemplo se recorre todo el contenido desde la fila 20 hasta la columna 5. Para indicar las filas y columnas a importar, indicarel valor en los parmetros correspondientes en la rutina que importa los valores de la hoja. Tambin , por defecto se leer los datos de la hoja activa que muestre el Excel. Para acceder a una hoja concreta, indicarlo en el ltimo parmetro de la funcin ( Parmetro sSheetName ) Nota . Este cdigo fuente ha sido probado con Excel versin 2000. Controles

Colocar un Command1 Un control Ms FlexGrid Especificar en el mtodo Workbooks.Open la ruta del Libro de Excel

Option Explicit

' \\ -- Autor :

Luciano Lodola -- http://www.recursosvisualbasic.com.ar/

' ---------------------------------------------------------------------------------

' -- Variables para acceder a la hoja excel Private obj_Excel As Object As Object

Private obj_Workbook

Private obj_Worksheet As Object

' ---------------------------------------------------------------------------------' \\ -- Inicio

' ---------------------------------------------------------------------------------Private Sub Form_Load() Me.Caption = " Importar Excel a FlexGrid " Command1.Caption = " Importar a Flexgrid " ' -- Configurar el Grid With MSFlexGrid1 .Cols = 10 .FixedCols = 0 End With End Sub ' ---------------------------------------------------------------------------------' \\ -- Fin ' ---------------------------------------------------------------------------------Private Sub Form_Unload(Cancel As Integer) Call Descargar End Sub

' ---------------------------------------------------------------------------------' \\ -- Funcin para leer los datos del Excel y cargarlos en el Flex ' ---------------------------------------------------------------------------------Private Sub Excel_FlexGrid(sPath As String, FlexGrid As Object, Filas As Integer, Columnas As Integer, Optional sSheetName As String = vbNullString)

Dim i As Long Dim n As Long

On Error GoTo error_sub ' -- Comproba si existe l archivo If Len(Dir(sPath)) = 0 Then

MsgBox "No se ha encontrado el archivo: " & sPath, vbCritical Exit Sub End If

Me.MousePointer = vbHourglass ' -- crea rnueva instancia de Excel Set obj_Excel = CreateObject("Excel.Application") 'obj_Excel.Visible = True

' -- Abrir el libro Set obj_Workbook = obj_Excel.Workbooks.Open(sPath) ' -- referencia la Hoja, por defecto la hoja activa If sSheetName = vbNullString Then Set obj_Worksheet = obj_Workbook.ActiveSheet Else Set obj_Worksheet = obj_Workbook.Sheets(sSheetName) End If

' -- Setear Grid With MSFlexGrid1 ' -- Especificar la cantidad de filas y columnas '.Cols = Columnas .Rows = Filas ' -- Recorrer las filas del FlexGrid para agregar los datos For i = 1 To .Rows - 1 ' -- Establecer la fila activa .Row = i ' -- Recorrer las columnas del FlexGrid

For n = 0 To .Cols - 1 ' -- Establecer columna activa .Col = n ' -- Asignar a la celda del Flex el contenido de la celda del excel .Text = obj_Worksheet.Cells(i + 1, n + 1).Value Next Next End With ' -- Cerrar libro obj_Workbook.Close ' -- Cerrar Excel obj_Excel.quit ' -- Descargar objetos para liberar recursos Call Descargar ' -- Errores Exit Sub error_sub: MsgBox Err.Description Call Descargar Me.MousePointer = vbDefault End Sub ' ---------------------------------------------------------------------------------' \\ -- Funcin para descargar los objetos ' ---------------------------------------------------------------------------------Private Sub Descargar() On Local Error Resume Next Set obj_Workbook = Nothing Set obj_Excel = Nothing

Set obj_Worksheet = Nothing Me.MousePointer = vbDefault End Sub ' ---------------------------------------------------------------------------------' \\ -- Botn para leer los datos del libro e importarlos al Grid ' ---------------------------------------------------------------------------------Private Sub Command1_Click() Call Excel_FlexGrid("c:\libro.xls", MSFlexGrid1, 20, 5, "Sheet1") End Sub

You might also like