FoxPress – Mayo 2006

 

Combina con Word

http://www.fpress.com/

 

Por Alberto Rodriguez                        
 

Recientemente un cliente me pidió una forma fácil de diseñar una aplicación usando reports de Word en vez de los nativos de Fox.

 

        Durante un tiempo estuve mirando el mail merge y otros procesos similares y me pareció un poco complejo de instalar y de hacerlo funcionar. Al final me decanté por este sistema que lo que en realidad hace es coger un documento de word y sustituir una cadena por la que tengas en una tabla. El sistema es rápido y va bien.

 

        El documento Word tiene este aspecto en el que se muestra a continuación unos campos con << >>

 

 

El programa en Fox y la rutina que realiza el cambio de la cadena por el contenido es el siguiente:

 

CLOSE all

 

#DEFINE _DOCUMENTO    "d:\ut\mailing.doc"

 

LOCAL loWord, loDocument

 

*- Crea referencia a Word

TRY

  loWord = GETOBJECT(,'Word.Application')

CATCH

  loWord = CREATEOBJECT('Word.Application')

ENDTRY

 

IF VARTYPE(loWord) <> 'O'

  ERROR 'No se ha podido crear una referencia a WORD'

  RETURN .F.

ENDIF

 

*---------------------------------

* Abre el documento como ReadOnly

*---------------------------------

 

USE d:\ut\mail50 IN 0 ALIAS mail50

 

SCAN FOR EMPTY(email) AND RECNO() < 20

    TRY

          loDocument = loWord.Documents.Open(_DOCUMENTO,,.T.)

    CATCH

   

    *- Cierra instancia de Word

    IF VARTYPE(loWord) = 'O'

         loWord.Application.Quit(0) && Sale sin salvar y sin preguntar

         loWord = .NULL.

    ENDIF

          ERROR 'No se ha podido abrir el documento "' + _DOCUMENTO + '".'

    ENDTRY

 

    lfBuscaReplaCadena(loWord.Selection, "<<nombre>>",mail50.nombre )

    lfBuscaReplaCadena(loWord.Selection, "<<direcc1>>",mail50.direcc1 )

    lfBuscaReplaCadena(loWord.Selection, "<<direcc2>>",mail50.direcc2 )

    lfBuscaReplaCadena(loWord.Selection, "<<poblacion>>",mail50.poblacion )

    loWord.Visible = .t.

    loWord.printout()

    wait "Imprimiendo..." window at 15,40 timeout 5

    loWord.documents().close(.f.)

ENDSCAN

 

loWord.quit(.f.)

 

RETURN

 

 

FUNCTION lfBuscaReplaCadena

 

LPARAMETERS poSelection, pcValueToFind, pcValueToReplace

 

 

*--------------------------------------------------------

*- Busca una cadena y la reemplaza por otra

*-

*- Parametros:

*-       poSelection            Referencia a la selección a buscar.

*-                                                                                Ej. oWord.Selection

*-       pcValueToFind        Valor a buscar

*-       pcValueToReplace     Valor a reemplazar

*-

*- Devuelve:

*-             .t.           Si ha podido reemplazar todo

*-             .f.           Si NO ha podido reemplazar

*-

*--------------------------------------------------------

 

LOCAL llReturn

 

llReturn = .t.

 

TRY

  WITH poSelection.Find

         .ClearFormatting

         .Replacement.ClearFormatting

         .Text = pcValueToFind

         .Replacement.Text = pcValueToReplace

         .Forward = .T.

         .Wrap= 1

         .Execute(,,,,,,,,,,2)

  ENDWITH

CATCH TO nError

 

    llReturn = .f.

    THIS.cDescUltError = 'Ha ocurrido un error en el proceso de reemplazo de texto'

ENDTRY

 

RETURN (llReturn)

 

            Como puedes apreciar en el código,  está hecho para hacer un envio masivo de cartas a todos los clientes o posibles clientes de un fichero DBF.

 

            La Estructura del fichero DBF es la siguiente:

 

 

 

 

 

 

 

FoxPress – Mayo de 2006

© 2006 FoxPress. All rights reserved