Leer datos de una planilla de excel, sin necesidad de exportar

260 views
Skip to first unread message

Esteban Micossi

unread,
Aug 31, 2020, 2:08:28 PM8/31/20
to Comunidad de Visual Foxpro en Español
Hola Grupo

Me envían por e-mail una planilla de excel con datos de empleados y sus remuneraciones, debo extraer esosdatos desde la planilla y pasarla a un cursor.
Esta planilla tiene muchos firuletes, entre encabezado, y otras cosas.
El tema es que la información que necesito arranca desde la fila 7 hasta la 58, 
y desde la columna 1 hasta la 42, el resto no me interesa.
La cosa es que necesito leer desde vfp esos datos sin necesidad de exportar nada,
por que asi vendra todos los meses.
Si alguien tiene alguna rutina al respecto, se lo agradecería.
Desde ya muchísimas gracias.
Saludos Cordiales
Atte
Esteban Micossi




Edwin Duran

unread,
Aug 31, 2020, 2:39:52 PM8/31/20
to Comunidad de Visual Foxpro en Español

Ricardo Soldini

unread,
Aug 31, 2020, 8:25:25 PM8/31/20
to Comunidad de Visual Foxpro en Español
*Como automatiza una hoja de calculo de Microsoft Excel desde Visual FoxPro 
*En esta sencilla guía en la que encontrara tips básicos para automatizar una hoja de cálculo, 
*muchas veces nos hemos encontrado con la necesidad de crear desde los datos de nuestra aplicación 
*un documento para un usuario, y por lo general siempre se utiliza Excel.
*Creación de la hoja de calculo
*Para poder acceder a Excel desde Fox primero tenemos que crear un objeto el cual podamos manipular a nuestro antojo.
#include excel.h

tmpsheet = GetObject('','excel.sheet') 

*Luego hacemos una referencia a la aplicación, la cual nos permitirá manipular características de Excel como 
*por ejemplo que no muestre las líneas de división de celdas
XLApp = tmpsheet.application
XLApp.ActiveWindow.DisplayZeros = .f. &&No muestra las celdas en valor 0
XLApp.ActiveWindow.DisplayGridlines = .f. &&No muestra las líneas de división
XLApp.Visible = .t. &&Aplicacion visible
XLApp.WorkBooks.Add() &&Agrega una Hoja de calculo
*Luego de agregar una hoja de calculo creamos una referencia a esta
XLSheet = XLApp.ActiveSheet

*Ahora podemos manipular la hoja de calculo a nuestras necesidades.

*Manipularon de la hoja de calculo

*Insertar una imagen: muchas veces en nuestras hojas de calculo queremos o necesitamos inserta una imagen como por ejemplo el logo de la compañía o etc. Esto se hace de la siguiente manera
*XLSheet.Pictures.Insert(FULLPATH("bmp\logo.bmp")) .name="Picture 1"
*XLSheet.Pictures.Insert(“c:\aplicacion\bmp\logo.bmp") .name="Picture 1"

*En el anterior ejemplo insertamos una imagen, en el primer objeto le decimos a Fox que retorne la ruta completa de una imagen partir de una ruta relativa, en el segundo ejemplo asignamos la ruta de la imagen, también asignamos un nombre al objeto y así podemos cambiar las características del objeto como por ejemplo el ancho
**XLSheet.Shapes("Picture 1").Width=100

*Combinar celdas: Para combinar celdas podemos especificar un rango de celdas asi
XLSheet.Range("F1:J1").Merge

*Cambiar el formato: primero necesitamos especificar el rango de celdas a las cuales les deceamos cambiar el formato, podemos utilizar el comando WITH de Fox asi:
WITH XLSheet.Range("F1:J1")
.Merge
.value='EL TEXTO QUE DESEAMOS MOSTRAR'
.HorizontalAlignment=xlCenter &&Aliniar al centro *
.VerticalAlignment=xlCenter 
.Font.Bold=.t.
.Font.Size=14
.Font.Name="Arial"
ENDWITH


*Las constantes de Excel estan al final de la Guía.

*Cambiar el tamaño de una fila:
XLSheet.Rows(4).RowHeight=20


*Cambiar el tamaño de una columna: 
XLSheet.Columns("A:A").ColumnWidth=19.57


*Ajustar el tamaño a todas las columnas:
XLSheet.Columns().AutoFit

*Insertar filas:
XLSheet.Rows("1:1").Insert

*Bordes: Una forma de insertar bordes es especificar un rango y luego ajustar sus propiedades según nuestras necesidades asi:
WITH XLSheet.Range("A4:Q4")
  .Borders(xlDiagonalDown).LineStyle = xlNone
  .Borders(xlDiagonalUp).LineStyle = xlNone
  .Borders(xlEdgeLeft).LineStyle = xlNone
  .Borders(xlEdgeTop).LineStyle = xlNone
  .Borders(xlEdgeRight).LineStyle = xlNone
  .Borders(xlInsideVertical).LineStyle = xlContinuous
  .Borders(xlInsideVertical).Weight = xlThin
  .Borders(xlInsideVertical).ColorIndex = xlAutomatic
ENDWITH


*O también asi:
WITH XLSheet.Range("A4:Q4").Borders(xlEdgeLeft)
  .LineStyle = xlContinuous
  .Weight = xlThin
  .ColorIndex = xlAutomatic
ENDWITH


*Cambiar el color de varias columnas:
XLSheet.Range("H:H;J:J;L:L;N:N;P:P").Font.ColorIndex=42

*Formato numero:
XLSheet.Columns("E:Q").NumberFormat = "#,##0"


*Configurar el area y formato de impression:
WITH XLSheet.PageSetup
  .PrintArea = "$A:$Q" &&Area de Impresion
  .PrintTitleRows = "$1:$4" &&Filas como titulo
  .PrintTitleColumns = "" 
  .LeftHeader = ""
  .CenterHeader = ""
  .RightHeader = ""
  .LeftFooter = "&D &T" &&Pie de pagina fecha y hora
  .CenterFooter = ""
  .RightFooter = "&P" &&Pie de pagina izquierdo Numero pagina
  
  *Margenes
  .LeftMargin = XLApp.InchesToPoints(0.393700787401575)
  .RightMargin = XLApp.InchesToPoints(0.393700787401575)
  .TopMargin = XLApp.InchesToPoints(0.393700787401575)
  .BottomMargin = XLApp.InchesToPoints(0.393700787401575)
  .HeaderMargin = XLApp.InchesToPoints(0)
  .FooterMargin = XLApp.InchesToPoints(0)
  
  .PrintHeadings = .f.
  .PrintGridlines = .f.
  .PrintComments = xlPrintNoComments
  
  * Centrar area
  .CenterHorizontally = .t.
  .CenterVertically = .f.
  .Orientation = xlLandscape
  .Draft = .f.
  .PaperSize = xlPaperLegal
  .FirstPageNumber = xlAutomatic
  .Order = xlDownThenOver
  .BlackAndWhite = .f.
  *Imprimir a un %
  .Zoom = 80
ENDWITH

Jorge Kiernan

unread,
Aug 31, 2020, 10:19:33 PM8/31/20
to publicesvfoxpro
Lo mas simple, crear un cursor con las 42 columnas necesarias, y hacer un 
append from (lcplanilla) type xls 
donde lcplanilla contiene el nombre completo de la planilla a leer
Se puede agregar la clausula for sobre alguna columna, o filtrar los primeros renglones luego de importarlos.
Se complica si la planilla tiene formato XLSX que no lo soporta el VFP, en ese caso suelo abrirla mediante automatizacion del excel y guardarla con el formato 5.0 para poder aplicar la sentencia anterior.
Espero que te sea util.

--
Visita el Blog de la Comunidad Visual FoxPro en Español: http://comunidadvfp.blogspot.com
---
Has recibido este mensaje porque estás suscrito al grupo "Comunidad de Visual Foxpro en Español" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a publicesvfoxp...@googlegroups.com.
Para ver esta conversación en el sitio web, visita https://groups.google.com/d/msgid/publicesvfoxpro/4d6c1219-a6ef-493c-9765-b97603600832n%40googlegroups.com.

Esteban Micossi

unread,
Aug 31, 2020, 11:18:45 PM8/31/20
to Comunidad de Visual Foxpro en Español
Gracias Chicos por responder a mi solicitud y darme las distintas sugerencias.
Bueno. Tome el ejemplo que me envió Edwin Duran con un vídeo de youtube y lo aplique. Por supuesto me salto con un montón de errores, pero
es por la planilla que tome mas que por la programación del ejemplo. Tuve que adaptar algunos procesos y variables y me sirvió bastante.
Con lo que dice   jkiernan  que las planillas con extensión .XLSX que corresponde a los Excel del 2007 en adelante, el VFP no los lee, me llamo la
atención que este programa lo toma sin ningún problema y lo procesa perfectamente.
La verdad me sirvió bastante, por que debo dejárselo a un amigo que lo único que tiene que hacer es leer la planilla que le envían.
Bueno muchachos, muchas gracias por todo.
Les dejo cordiales saludos.
Atte
Esteban Micossi

Reply all
Reply to author
Forward
0 new messages