Visualizar cursor en excel desde vfp

Quisiera saber si se puede realizar lo siguiente ejemplo:

Curven ----nombre del cursor

Con los siguientes datos : fecha, nombre(cliente), descripción, cantidad

Lo que deseo es que se visualice los datos del cursor en excel pero que no se guarde y con formato y que si el usuario desee guardarlo que lo haga dentro del mismo excel con nombre o ruta que desee, el cursor se llenara con rangos de fechas. De un determinado producto pero desearia que se visualizara de la siguiente manera en el excel

Logo-- esquina superior izquierda

Nombre de la empresa-

Descripcion del producto

nombre(cliente)         01-01--17     02-01-17     03-01-17  etc..

pablo                                 1

pedro                                                      5

maria                                                                            8

Y asi sucesivamente suponiendo que desea el rango de fecha sea desde el 01 enero al 31 enero.

Siguiente inquietud

Y si fuera el rango de fecha sea de tres meses enero, febrero, marzo

Hoja 1----- iria solo las ventas de enero

hoja 2 ... Ventas de febrero

Y asi sucesivamente.

2 respuestas

Respuesta
2

1er. Ejemplo:

Local oExcel
oExcel = Createobject("Excel.Application")
oExcel.Visible = .T.
oExcel.Workbooks.Add
oExcel.Sheets.Add
oExcel.Sheets.Add
oExcel.Sheets.Add
oExcel.Sheets("Hoja1").Name="Abril"
oExcel.Sheets("Hoja2").Name="Marzo"
oExcel.Sheets("Hoja3").Name="Febrero"
oExcel.Sheets("Hoja4").Name="Enero"
oExcel.Cells(1,1).Value ="Prueba 1"
oExcel.Cells(1,1).Font.Bold = .T.       && Pone en negritas el contenido de la celda.
oExcel.Cells(1,2).Value ="Prueba 2"
oExcel.Cells(2,1).Value ="Prueba 3"
oExcel.Cells(2,2).Value ="Prueba 4"
Release oExcel

2do. Ejemplo; "Aquí se usa de ejemplo una tabla Clientes que tiene al menos 2 campos, uno de nombre CodCli y el otro NomCli

Local oExcel, nCelda
Use Clientes In 0 Alias Clientes Shared
Set Order To CodCli
oExcel = Createobject("Excel.Application")
oExcel.Visible = .T.
oExcel.Workbooks.Add
nCelda = 1
Scan
    oExcel.Cells(1,nCelda).Value = Clientes.CodCli
    oExcel.Cells(2,nCelda).Value = Clientes.NomCli
    nCelda = nCelda + 1
Endscan
Return

muchas gracias por responder 

como se podria indicar en el caso de que el rango de fecha de ventas fuera de tres meses, dos meses, o seis meses ( ya que el rango de fechas se obtiene de dos text) por lo tanto no hay nada establecido al llenar el cursor si va ser mensual o varios meses al llenar el cursor. y mi pregunta seria como le indico a excel si es dos meses que un mes en una hoja y el otro mes en otra hoja, el problema esta en que en el boton donde va el codigo para copiar los datos a excel ya va estar definido, porque la situacion esta como mencione antes depende de la fecha inicial text1 y la fecha final text2, por lo tanto se ignoraria el rango de fecha que eligira el usuario, ¡ como seria que no importando el rango de fecha que seleccione el usuario se pueda dividir en varias hojas si son varios meses¡ no se si me logre explicar bien

y muchisimas gracias nuevamente

Con el siguiente procedimiento podrás identificar meses años, cantidad de meses.

Crea un PRG copia éste método y lo corres (ejecutas) y los resultados son los que se ven con el símbolo "?".

Clear
* --- Definir Variables. ---
Local nMes, dDia1, dDia2, dMes1, dMes2, nDify, cMeses, nCant, nX, nY
dDia1  = Date(2015,3,10)
dDia2  = Date(2017,7,15)
dMes1  = Month(dDia1)
dMes2  = Month(dDia2)
nDify  = Year(dDia2)-Year(dDia1)
CMeses = "Enero, Febrero, Marzo, Abril, Mayo, Junio, Julio, Agosto, Setiembre, Octube, Noviembre, Diciembre"
* --- Contar cantidad de meses. ---
If nDify>0
    nCant = ((dMes2+(12*nDify))-dMes1)+1
Else
    nCant = (dMes2-dMes1)+1
Endif
* --- Leer y mostrar meses y años. ---
nMes = dMes1
For nX=Year(dDia1) To Year(dDia2)
    nConteo = Iif(nX=Year(dDia2),dMes2,12)
    For nY=nMes To nConteo
        cMes = Getwordnum(cMeses,nMes,",")
        nMes = nMes+1
        nMes = Iif(nMes=13,1,nMes)
        ? cMes+"/"+TRANSFORM(nX)         && ESTE ES EL RESULTADO.
    Next
NEXT
? "Cant. Meses="+Transform(nCant)        && AQUI MUESTRA CANT. DE MESES.
Return

Para que tome los datos ingresados en un objeto tipo textbox de tu formulario (dices que uno se llama text y el otro text2), pues debes modificar las siguientes líneas...

dDia1  = Thisform.Text1.value
dDia2  = Thisform.Text2.value

Se supone que esos objetos devuelven un formato de fecha; si no fuese así, solo agregas a lo anterior lo siguiente..

dDia1  = ctod(alltrim(Thisform.Text1.value))
dDia2  = ctod(alltrim(Thisform.Text2.value))
Respuesta
1

Disculpa la demora en responder.

Sí puedes utilizar Excel desde VFP y plasmar los valores de un cursor tal y como lo indica SysGen en el post previo.

Tanto en VFP, VB.NET o C# se puede utilizar la Automation con Excel, yo la he utilizado de 3 formas:

1- Crear un archivo nuevo de Excel y pasar el contenido de un cursor en bruto sin formatos.

2-Abrir un archivo que ya tiene un formato (cuadriculas, logos, imágenes, etc) e inyectar en él los datos del cursor. Adicionando líneas o columnas de ser necesario. (Este es el que más utilizo)

3- Crear un archivo nuevo de Excel y ajustar columnas, dar formatos (cuadriculas, tamaños, negrillas, etc), adicionar columnas o filas, insertar imágenes, etc.

Si no deseas guardar el archivo simplemente has visible el objeto del excel instanciado y después lo eliminas en el código del programa (quedará cargado el excel y tu programa se desvinculará de él)

Te dejo un link muy ilustrativo; saludos

Crear un archivo nuevo de Excel

muchas gracias por responder 

como se podria indicar en el caso de que el rango de fecha de ventas fuera de tres meses, dos meses, o seis meses ( ya que el rango de fechas se obtiene de dos text) por lo tanto no hay nada establecido al llenar el cursor si va ser mensual o varios meses al llenar el cursor. y mi pregunta seria como le indico a excel si es dos meses que un mes en una hoja y el otro mes en otra hoja, el problema esta en que en el boton donde va el codigo para copiar los datos a excel ya va estar definido, porque la situacion esta como mencione antes depende de la fecha inicial text1 y la fecha final text2, por lo tanto se ignoraria el rango de fecha que eligira el usuario, ¡ como seria que no importando el rango de fecha que seleccione el usuario se pueda dividir en varias hojas si son varios meses¡ no se si me logre explicar bien

y muchisimas gracias nuevamente

Según entiendo el problema es que tienes que separar la información en el Excel dependiendo de la fecha del registro (fila) o sino dependiendo del rango entre las fechas a evaluar, vamos a pensar en ambas situaciones:

1- LA FECHA DEL REGISTRO, puedes tener en el excel los 12 meses del año separados en tabs (hojas) y cada vez que selecciones una fila del cursor evalúas la fecha del registro (a que mes corresponde) y con un if o un case decides la página a donde enviaras los datos.

2-RANGO VARIABLE, en el cursor agregas un campo tipo numero cuentas los días entre la fecha de la línea y la fecha actual, ese numero lo divides entre el numero de días de 1 mes y ya tienes la antigüedad (entre más alto, más viejo), ahí puedes ya saber a que hoja vas a mandar los datos.

Toma en cuenta que para cada hoja (tab) debes saber cual es la ultima línea insertada así agregaras la información en la línea siguiente, puedes usar un contador de línea independiente para cada hoja.

Para cambiarte entre hojas usas oexcel. Worksheets(<Acá el numero de la hoja>)

Espero haberme podido explicar y que te sea útil la información.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas