Professional Documents
Culture Documents
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
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
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
Dim Columna
As Long
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 :
' ---------------------------------------------------------------------------------
' -- Variables para acceder a la hoja excel Private obj_Excel As Object As Object
Private obj_Workbook
' ---------------------------------------------------------------------------------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)
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