*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