23 de abril de 2018

Copiar una grafica de Excel y pegarla en una diapositiva de PowerPoint

El Objetivo del siguiente código es abrir un libro de Excel y una presentación de PowerPoint, copiar un Grafico (Gráfico 2) el cual se encuentra en la primera hoja del libro y luego pegarlo en la diapositiva 19 de la presentación.

*!* Abrimos el archivo de Excel y de power point
lcArchivoExcel=GETFILE("xls","Abrir archivo de Excel")
lcArchivoPower=GETFILE("ppt","Abrir archivo de Power")

*!* Comprobamos que existan
IF FILE(lcArchivoExcel)==.F. OR FILE(lcArchivoPower)==.F.
  =MESSAGEBOX("Los archivo o alguno no existe",16,"File==.f.")
  RETURN
ENDIF

*!* Obejtios de Excel
loXlsApp = CREATEOBJECT("Excel.Application")
loXlsBook=loXlsApp.Workbooks.OPEN(lcArchivoExcel)
loXlsApp.VISIBLE = .T.
loXlsSheet = loXlsBook.Sheets(1)

*!* Seleccionando Grafica y Copiando
loGraficoXls = loXlsSheet.ChartObjects("Gráfico 2")
loGraficoXls.COPY()

*!* Objetos de Power Point
loPptApp = CREATEOBJECT("Powerpoint.Application")
loPptApp.VISIBLE= .T.
loPptPresentacion = loPptApp.Presentations.OPEN(lcArchivoPower)
loPptSlide=loPptPresentacion.Slides(19)
loPptSlide.SELECT()

*!* Pegamos Objeto
loGraficoPpt=loPptSlide.Shapes.Paste()

*!* Movemos el Grafico al centro
WITH loPptSlide.Shapes(loGraficoPpt.NAME)
  .IncrementLeft(-521.75)
  .IncrementTop(104.12)
ENDWITH

Jose Guillermo Ortiz Hernandez

21 de abril de 2018

Copiar celdas de una Hoja de calculo (Excel) y pegarlas en una diapositiva (PowerPoint)

El siguiente ejemplo muestra como copiar celdas existentes en un libro de excel y copiarlas en una diapositiva de una presentacion de Power Point. En este ejmplo se supone que el libro y la presentacion ya existen.

LOCAL loXlsApp, loXlsBook, loXlsSheet, loPptApp, loPptPresentacion, loPptSlide

*!* ARCHIVOS ORIGEN
*!* Archivo de Excel en donde estan los datos
*!* Comprobamos que exista el archivo, de no existir lo abrimos
lcArchivoExcel="datos.xls"
lcArchivoExcel=IIF(!FILE(lcArchivoExcel),GETFILE("xls"),lcArchivoExcel)

*!* Archivo de Power Point donde deseamos pegar los datos
*!* Nuevamente comprobamos si existe el archivo o si hay que buscarlo
lcArchivoPower="presentacion.ppt"
lcArchivoPower=IIF(!FILE(lcArchivoPower),GETFILE("ppt"),lcArchivoPower)

*!* INICIANDO PROCESO DE COPY -> PASTE
IF FILE(lcArchivoExcel) AND FILE(lcArchivoPower)

  *!* COPIANDO DATOS DE EXCEL AL CLIPBOARD
  loXlsApp = CREATEOBJECT("Excel.Application")
  loXlsApp.VISIBLE = .T.
  loXlsBook=loXlsApp.Workbooks.OPEN(lcArchivoExcel)
  loXlsSheet = loXlsBook.Sheets(3)
  loXlsSheet.RANGE("A1:I23").COPY()

  *!* PEGANDO DATOS DESDE EL CLIPBOARD A DIAPOSITIVA
  loPptApp = CREATEOBJECT("Powerpoint.Application")
  loPptApp.VISIBLE= .T.
  loPptPresentacion = loPptApp.Presentations.OPEN(lcArchivoPower)
  loPptSlide=loPptPresentacion.Slides(18)
  loPptSlide.SELECT()
  loPptApp.ActiveWindow.VIEW.Paste()
ELSE
  =MESSAGEBOX("Los archvios de Excel y Power no existen",0+64+0,"No existen")
ENDIF

Jose Guillermo Ortiz Hernandez

16 de abril de 2018

Mensaje tipo Messenger

Antes de comenzar cambiamos la propiedad ShowWindow A 2 (Formulario de nivel superior)

Ahora declaramos la API que vamos a utilizar la colocamos en el evento Load del formulario:

DECLARE integer SetWindowPos IN "user32";
  integer hwnd, integer hWndInsertAfter,;  
  integer x,integer y,integer cx,integer cy,integer wFlags 

Si queremos darle un grado de transparencia declaramos estas.

Declare Integer SetWindowLong In "user32" ;
  Integer HWnd, Integer nIndex, Integer dwNewLong

Declare Integer SetLayeredWindowAttributes In "user32" ;
  Integer HWnd, Integer crey, ;
  Integer bAlpha, Integer dwFlags

Bueno ahora en el evento Init colocamos lo siguiente.

*- esto nos permitira abrir el formulario sin que nos afecte otra ventana.
=SetWindowPos(this.HWnd, -1, 0, 0, 0, 0, 1 + 2 )

*-- Con estas define el grado de transparencia del formulario
SetWindowLong(THISFORM.hWnd, -20, 0x00080000)
*-- Cambia el valor (200) para ajustar el nivel de transparencia. 
SetLayeredWindowAttributes(THISFORM.hWnd, 0, 200, 2) 

Bien ahora vamos a darle una pequeña animación.

En el evento Active del form colocamos lo siguiente.

*-- Ubico el formulario 
tleft = (_screen.Width -this.Width)
ttlef = (tleft + this.Width)
this.Move (ttlef,ttop,this.Width,this.Height)
FOR i = 1 TO tleft  && muevo el form 
  ttlef = ttlef - 1
  this.Move (ttlef,ttop,this.Width,this.Height)
  IF ttlef = tleft 
    EXIT 
  ENDIF  
ENDFOR

Ahora el sonido en el mismo evento.

lcWaveFile =""
*-- defino la ruta del sonido a emitir  
lcWaveFile = ruta + "Librerias\newemail.wav" 

DECLARE INTEGER PlaySound ;
  IN WINMM.dll  ;
  STRING cWave, ;
  INTEGER nModule, ;
  INTEGER nType

PlaySound(lcWaveFile,0,1)

Y listo ya tenemos nuestro mensaje tipo Messenger el diseño corre por cuenta de ustedes.

by FreeCalls