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
Problemas con tWord y reemplazar variables
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
Carlos,
Si solo vas a reemplazar una vez el texto, te puedes evitar el bucle:
Si solo vas a reemplazar una vez el texto, te puedes evitar el bucle:
Code: Select all
if oFind:Found
oTexto:Text:=cNuevo
endif
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
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
Carlos
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
- Marcelo Roggeri
- Posts: 275
- Joined: Sat Jul 22, 2006 9:04 pm
- Location: Venado Tuerto - Santa Fe -Argentina
- Contact:
Re: Problemas con tWord y reemplazar variables
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
He probado tu ejemplo pero no logro hacerlo funcionar, tal vez ahora lo tengas de otra manera.
Desde ya gracias.
Te saludo atte.
Marcelo
FWH - Harbour - BCC7 - PellesC - FivEdit (Cristobal Navarro)