240 exportar e importar excel

17
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 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

Upload: walter-delgado

Post on 22-Oct-2014

93 views

Category:

Documents


12 download

TRANSCRIPT

Page 1: 240 Exportar e Importar Excel

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

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

Page 2: 240 Exportar e Importar Excel

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

' \\ -- 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

Page 3: 240 Exportar e Importar Excel

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

Page 4: 240 Exportar e Importar Excel

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

Page 5: 240 Exportar e Importar Excel

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()

Page 6: 240 Exportar e Importar Excel

' -- 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

Page 7: 240 Exportar e Importar Excel

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

Page 8: 240 Exportar e Importar Excel

' -- 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

Page 9: 240 Exportar e Importar Excel

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

Page 10: 240 Exportar e Importar Excel

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

' \\ -- 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

Page 11: 240 Exportar e Importar Excel

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

Page 12: 240 Exportar e Importar Excel

' -- 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

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

Page 13: 240 Exportar e Importar Excel

' \\ -- 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