Upload
walter-delgado
View
93
Download
12
Tags:
Embed Size (px)
Citation preview
240 - Exportar un Flexgrid a Excel
Ejemplo 1 - Exportar a un nuevo libroEjemplo que exporta el contenido de una grilla de tipo MsFlexGrid o MsHFlexGrid a una hoja de cálculo Excel exisitente.
Controles
Colocar en un Formulario un Hierarchical Flexgrid o el Flexgrid v6. clásico Un botón
Especificar en el parámetro 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
' -----------------------------------------------------------------------------------
' -------------------------------------------------------------------------------------------
' \\ -- Botón 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 añadir 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
' -------------------------------------------------------------------------------------------
' \\ -- Función 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 As Object
Dim o_Libro As Object
Dim o_Hoja As Object
Dim Fila As Long
Dim Columna As Long
' -- 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 aplicación 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 concretaEn 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 método Add del objeto Workbook, utiliza el método Open para abrirlo.
Código fuente en el form, con un Hierarchical flex y un botón. ( Indicar la ruta del libro en el primer parámetro de la función )
Option Explicit
' -----------------------------------------------------------------------------------
' \\ -- Autor : Luciano Lodola -- http://www.recursosvisualbasic.com.ar/
' \ -- Agregar la Referencia a Microsoft Excel Object Library
' -----------------------------------------------------------------------------------
' -------------------------------------------------------------------------------------------
' \\ -- Botón 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 añadir 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
' -------------------------------------------------------------------------------------------
' \\ -- función 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 As Object
Dim o_Libro As Object
Dim o_Hoja As Object
Dim Fila 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 parámetro de la función
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 aplicación 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 ExcelEsta rutina es lo que hace es abrir una hoja de cálculo 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 parámetros correspondientes en la rutina que importa los valores de la hoja. También , por defecto se leerá los datos de la hoja activa que muestre el Excel. Para acceder a una hoja concreta, indicarlo en el último parámetro de la función ( Parámetro sSheetName )
Nota . Este código fuente ha sido probado con Excel versión 2000.
Controles
Colocar un Command1 Un control Ms FlexGrid
Especificar en el método 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
Private obj_Workbook As Object
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
' ----------------------------------------------------------------------------------
' \\ -- Función 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
' ----------------------------------------------------------------------------------
' \\ -- Función 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
' ----------------------------------------------------------------------------------
' \\ -- Botón 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