Page 1 of 1

Problemas con tWord y reemplazar variables

PostPosted: Mon Aug 21, 2006 6:28 pm
by colthop
Hola amigos :

He utilizado lo desarrollado por Jose - y posteriormente modificado o aclarado por Manuel Valdenebro. WORDMCN.PRG. Y todo parece funcionar bien. Excepto que no consigo que lo puesto entre corchetes en el documento word lo reemplace por el dato del campo del fichero y esto hace que se quede en el bucle y no salga.

Por si os puede ayudar a continuación pongo el codigo:

store Curdrive() to xdri
store xdri + ":\" + curdir(xdri) + "\" to xdir
store xdir + "EMP" + empr + "\cert" + ejer + ".doc" to fich
store xdir + "certmode.doc" to fic1
if file (fich)
if MsgYesNo("El Certificado se ha emitido anteriormente," + chr(13) +;
" ¿ Desea recacerlo ? ","Certificado existente")
erase &fich
opci11 = "S"
else
opci11 = "N"
endif
else
opci11 = "S"
endif
if opci11 = "S"
SELECT 1
use EMPRESA SHARE
OrdSetfocus("empre01")
seek empr
oWord:=TOleAuto():New( "Word.Application" )
cPlantilla := (fic1)
oDoc :=oWord:Documents:Open(cPlantilla) // abre el doc modelo
// nombre de la variable
cViejo := "[EMPRESA_APELLIDOS]"
cCampo := (FIELDGET (FIELDPOS(apellidos)))
cFich := fich
cNuevo := (cFich)->(FIELDGET (FIELDPOS(cCampo)))
IF VALTYPE (cNuevo) = "C" // tipo caracter
cNuevo := RTRIM (cNuevo)
ENDI
REEMPLACE (oDoc, cViejo, cNuevo )
oDoc := oWord:Get("ActiveDocument") // object (documento activo)
oDoc:Invoke( "SaveAs", cFich ) // graba fichero
oDoc:Invoke('Close',0) // cierra fichero
endif
clos data
oWord:=TOleAuto():New( "Word.Application" )
oWord:Documents:Open(fich)
oWord:Visible := .T.
oWord:Set( "WindowState", 1 )
oWord:End()
OleUninitialize()
RETURN (NIL)

STATIC FUNCTION REEMPLACE (oDoc, cViejo, cNuevo)
LOCAL oSelection, oTexto, oFind
oSelection := oDoc
oTexto := oSelection:Range
oFind := oTexto:Find
oFind:Text:= cViejo
oFind:Forward:=.T.
oFind:Wrap:= INT(1)
oFind:Format:=.f.
oFind:MatchCase:=.f.
oFind:Execute()

*en este bucle se queda y no sale

WHILE oFind:Found
oTexto:Text:=cNuevo
oFind:Execute()
Enddo
RETURN nil

Si podeis ayudarme os lo agradeceria mucho.

Un saludo

Carlos

PostPosted: Mon Aug 21, 2006 8:37 pm
by Antonio Linares
Carlos,

Si solo vas a reemplazar una vez el texto, te puedes evitar el bucle:
Code: Select all  Expand view
if oFind:Found
   oTexto:Text:=cNuevo
endif

PostPosted: Tue Aug 22, 2006 7:31 am
by colthop
Hola Antonio y gracias por tus ayudas. El problema le tengo en que no reemplaza, aunque le ponga lo que tu me indicas en el destino no cambia el [APELLIDOS] por el contenido del campo apellidos del fichero EMPRESA.

Un saludo

Carlos

PostPosted: Tue Aug 22, 2006 8:59 am
by Antonio Linares
Carlos,

Igual no le gusta el guión bajo de EMPRESA_APELLIDOS. Prueba a cambiarlo a EMPRESAAPELLIDOS

PostPosted: Tue Aug 22, 2006 6:45 pm
by colthop
Hola de nuevo ya he podido solucionar el problema y ha sido facil ya que yo introducia el campo del fichero directamente y no el campo de un fichero que contenia el campo a reemplazar asique en vez de poner en los dos sitios (FIELDGET (FIELDPOS(apellidos))) he puesto simplemente (apellidos) y funciona, te lo digo por si hay alguien que le pase o le pueda pasar. Un saludo y gracias por tu interes Antonio.

Carlos

PostPosted: Tue Aug 22, 2006 6:55 pm
by Antonio Linares
Carlos,

Me alegro de que esté solucionado :-)

Re: Problemas con tWord y reemplazar variables

PostPosted: Wed Oct 03, 2012 5:03 pm
by Marcelo Roggeri
Hola queria saber si tenes el ejemplo de como reemplazar una variable en word por un campo de una dbf?
He probado tu ejemplo pero no logro hacerlo funcionar, tal vez ahora lo tengas de otra manera.
Desde ya gracias.
Te saludo atte.
Marcelo