22 de marzo de 2009

Unifica dos archivos en formato MSWORD que estan separados en uno solo

Hace unos días un amigo me pidió que le ayudara con un rutina que ligara dos documentos separados en uno solo realizados en MSWORD. Aquí esta el código.

Todos los comandos utilizados en esta rutina están en la documentación que PortalFox tiene disponible para todos nosotros.

*--Verifica que existan los archivos antes de instanciar WORD
*--------------------------------------------------------------------------
*--Instancia y copia la primera hoja que contiene el texto del .RTF
*--------------------------------------------------------------------------
wFile=FULLPATH("HojaTexto.Rtf")
IF !FILE(wFile)
  =MESSAGEBOX("¡¡Archivo &wFile, no se pudo encontrar!!",16,Titulo)
  RETURN
ENDIF

*----------------------------------------------------------------------
*--Contiene la fotografia y pequeña reseña.
*----------------------------------------------------------------------
gFile=FULLPATH("hoja.Doc")
IF !FILE(gFile)
  =MESSAGEBOX("¡¡Archivo &gFile, no se pudo encontrar!!",16,Titulo)
  RETURN
ENDIF

*------------------------------------------------------------------------
*---ABRE WORD OCULTO PARA COPIAR LOS DATOS Y SE SALE
*------------------------------------------------------------------------
oWord=CREATEOBJECT("Word.Application")
WAIT WIND "Abriendo sesión de MS Word" NOWAIT
WITH oWord
  .Documents.ADD(wFile)  &&Abre el documento .RTF
  .ActiveDocument.SELECT &&Activa la hoja
  cText=.SELECTION.TEXT  &&Selecciona todo el texto
  .SELECTION.COPY        &&Copia todo el texto del documento seleccionado
  .VISIBLE=.F.           &&Abre la primera INSTANCIA de WORD OCULTO del documento .RTF
  .ActiveDocument.CLOSE  &&Cierra el documento .RTF ACTIVO

  .Documents.ADD(gFile)  &&Abre el documento .DOC que contiene las fotos
  .CAPTION="ProtalFox.com......" &&Coloca un titulo al documento

  *--Bajar las filas que desea en el documento abierto
  FOR i=1 TO 100         &&Baja 100 lineas hasta el final del archivo
    oWord.SELECTION.MoveDown
  ENDFOR
  .SELECTION.Paste       &&Pega los datos al final del documento .DOC
  *.Selection.HomeKey     &&Se supone que coloca el cursor en la primera linea
  .VISIBLE=.T.
ENDWITH
WAIT CLEAR
RETURN
*------------------------------------------------------------------------
Tonny Molina

14 de marzo de 2009

Envío de correo electrónico por el servidor SMTP de Windows Live Hotmail

Actualmente Windows Live Hotmail habilitó el acceso POP3 y SMTP en todas las cuentas de correos de Hotmail.

Está publicado el artículo Envío de correo electrónico por el servidor SMTP de Gmail del cual partiremos y solo cambiaremos las configuraciones necesarias que son:
  • Nombre de usuario: El nombre de tu Windows Live ID, (Ejemplo: usuario@hotmail.com)
  • Contraseña: La contraseña de tu cuenta Windows Live
  • Servidor SMTP: smtp.live.com
  • Puerto SMTP: 25
  • Autenticación requerida: Si
  • Cifrado TLS/SSL requerido: Si
Para los que quieren saber los datos del servidor POP3 de Windows Live Mail, no necesarios para este artículo:
  • Servidor POP3: pop3.live.com
  • Puerto POP3: 995
  • POP3 SSL requerido: Si
El siguiente es el código modificado que nos permite el envió de correo electrónico a través del servidor SMTP de Windows Live Hotmail.
TRY
  LOCAL lcSchema, loConfig, loMsg, loError, lcErr
  lcErr = ""
  lcSchema = "http://schemas.microsoft.com/cdo/configuration/"
  loConfig = CREATEOBJECT("CDO.Configuration")
  WITH loConfig.FIELDS
    .ITEM(lcSchema + "smtpserver") = "smtp.live.com"
    .ITEM(lcSchema + "smtpserverport") = 25
    .ITEM(lcSchema + "sendusing") = 2
    .ITEM(lcSchema + "smtpauthenticate") = .T. 
    .ITEM(lcSchema + "smtpusessl") = .T.
    .ITEM(lcSchema + "sendusername") = "miusuario@hotmail.com"
    .ITEM(lcSchema + "sendpassword") = "micontrasenia"
    .UPDATE
  ENDWITH
  loMsg = CREATEOBJECT ("CDO.Message")
  WITH loMsg
    .Configuration = loConfig
    .FROM = "Usuario Hotmail <miusuario@hotmail.com>"
    .TO = "usuario@gmail.com"
    .Subject = "Prueba desde Windows Live Hotmail"
    .TextBody = "Este es un mensaje de prueba con CDO con " + ;
      "autenticación y cifrado SSL desde Windows Live Hotmail."
    .Send()
  ENDWITH
CATCH TO loError
  lcErr = [Error: ] + STR(loError.ERRORNO) + CHR(13) + ;
    [Linea: ] + STR(loError.LINENO) + CHR(13) + ;
    [Mensaje: ] + loError.MESSAGE
FINALLY
  RELEASE loConfig, loMsg
  STORE .NULL. TO loConfig, loMsg
  IF EMPTY(lcErr)
    MESSAGEBOX("El mensaje se envió con éxito", 64, "Aviso")
  ELSE
    MESSAGEBOX(lcErr, 16 , "Error")
  ENDIF
ENDTRY
Para conocer muchas mas opciones que nos brinda CDO para el envío de correos electrónicos desde VFP, podemos ver el siguiente artículo: Mas sobre el envio de mensajes de correo electrónico desde Visual FoxPro

Hasta la próxima,

Luis María