Page 1 of 1

Clase TWord

PostPosted: Tue Nov 04, 2008 11:29 am
by fergonm
He bajado el PRG de la clase Tword pero no localizo los ejemplos ni la ayuda de la misma.

Me pueden decir donde encontrarlo.

Un saludo.

PostPosted: Thu Nov 06, 2008 7:10 pm
by fergonm
Una pregunta.

En el documento Word que se utilizará como primario para el merge, los campos a reemplazar en ese documento ¿como se colocan el el docuemnto? ¿Son campos Word? ¿Se colocan nombres de campos con algún caracter?.

Muchas gracias.

PostPosted: Thu Nov 06, 2008 7:24 pm
by Manuel Aranda
Hola Fernando:

Te pongo un trozo de código que, espero, te ayudará:

Code: Select all  Expand view

................
      oWord := Tword():New()
      oWord:OpenDoc(cRutaDoc)
      //
      IF lPreWord
          oWord:Visualizar()
      ENDIF
      //
      oWord:Replace("[TRATAMIENTO]",cTratami)
      oWord:Replace("[NUMEROSOCIO]",cNumSocio)
      oWord:Replace("[NOMBRE]",cNombre)
      oWord:Replace("[DOMICILIO]",cDomicilio)
      oWord:Replace("[CPOSTALYLOCALIDAD]",cCLP)
      //
      IF lPreWord
         oWord:Visualizar()
      ENDIF
      //
      oWord:PrintDoc()
      oWord:End(.F.)
.............



Como puedes observar los campos que van en el documento se encierran entre corchetes, aunque puedes utiliza cualquier otro símbolo.

PostPosted: Thu Nov 06, 2008 7:47 pm
by fergonm
Manuel Aranda wrote:Hola Fernando:

Te pongo un trozo de código que, espero, te ayudará:

Code: Select all  Expand view

................
      oWord := Tword():New()
      oWord:OpenDoc(cRutaDoc)
      //
      IF lPreWord
          oWord:Visualizar()
      ENDIF
      //
      oWord:Replace("[TRATAMIENTO]",cTratami)
      oWord:Replace("[NUMEROSOCIO]",cNumSocio)
      oWord:Replace("[NOMBRE]",cNombre)
      oWord:Replace("[DOMICILIO]",cDomicilio)
      oWord:Replace("[CPOSTALYLOCALIDAD]",cCLP)
      //
      IF lPreWord
         oWord:Visualizar()
      ENDIF
      //
      oWord:PrintDoc()
      oWord:End(.F.)
.............



Como puedes observar los campos que van en el documento se encierran entre corchetes, aunque puedes utiliza cualquier otro símbolo.


Gracias Manuel.

El código ya lo tenía de un problema que tenías tu. La duda era´sobre el documento de word que utilizaré como primario para combinar. Entiendo que puedo colocar cualquier llamada, ya que será lo que se invoque con Replace.

Un saludo. Fernando

asi uso tword

PostPosted: Thu Nov 06, 2008 11:14 pm
by Ramon Paredes
Fernando, el codigo a continuacion es como imprimo desde un sistema constancias salariales, tengo un documento primario en word creado preliminarmente dejando entre corchetes los campos a reemplazar y desde ahi lo tomo como plantilla ,


local oWord,oFont1,oFont2,mdoc
local afondo := {nRGB(255,0,0), nRGB(255,255,255), ,2,4}
local alinea := {5},mTexto,mTexto1,mTexto2,mTexto3,mTexto4,mTexto5,otxt,otxt1
local oTxt2,oTxt3,cMes1,cNommes

mTexto := "("+CONVERTIR(mSaldo1,"Cordobas")+")"
mTexto1 := "("+CONVERTIR(mDesde,"Cordobas")+")"
mTexto2 := "("+CONVERTIR(mHasta,"Cordobas")+")"

cMes1 := date()
cNommes := FAN(@cMes1,cNommes)

oWord:= Tword():New

DEFINE FONT oFont1 NAME "Arial" SIZE 0,-12 BOLD ITALIC UNDERLINE of oWord
DEFINE FONT oFont2 NAME "Tahoma" SIZE 0,-12 ITALIC of oWord

/*
este esl documento primario donde tengo entre corchetes los campos a reemplazar */

oWord:OpenDoc("C:\DATA1\SALARIO1.DOC")
oWord:SetCm()

oWord:Replace([Nombre1],mCodigo+"-"+mNombre)
oWord:replace([Fing],mCarrera)
oWord:replace([Mcargo],mCargo)
oWord:replace([Msalario],mSaldo)
oWord:replace([Mletras],mTexto)
oWord:replace([Mdesde],mDesde)
oWord:replace([Mletra1],mTexto1)
oWord:replace([Mhasta],mHasta)
oWord:replace([Mletra2],mTexto2)
oWord:replace([Mfecha],cNommes)

//oWord:Preview()

/*
Despues del reemplazo de los campor salvo mi documento con otro nombre y mi plantilla queda sin alteraciones
*/

oWord:Save("PRUEBA.DOC")
oWord:PrintDoc(,,,,,,,,,) // imprimo el documento sin o con vista previa

oWord:End()
oFont1:End()

RETURN NIL

Ojala te sea de alguna utilidad


Saludes desde Managua, Nicaragua

Ramon Paredes

PostPosted: Fri Nov 07, 2008 7:40 am
by fergonm
Ramón.

Muchas gracias por tu contestación. Probaré

Un saludo.

PostPosted: Fri Nov 07, 2008 7:07 pm
by fergonm
Buenas tardes.

Tras realizar un pequeño ejemplo, en tiempo de ejecución tengo un error.

Application
===========
Path and name: d:\personal\perito32\perito3.Exe (32 bits)
Size: 667,648 bytes
Time from start: 0 hours 0 mins 45 secs
Error occurred at: 07-11-2008, 20:01:47
Error description: Error BASE/1004 No existe el m‚todo: GET
Args:
[ 1] = U
[ 2] = C MailMerge

Stack Calls
===========
Called from: source\rtl\tget.prg => GET(0)
Called from: => TWORD:OPENDOC(434)
Called from: d:\personal\perito32\Prg\facturas.prg => IMPRIME_FACTURA(269)
Called from: d:\personal\perito32\Prg\verfactura.prg => VERFACTURA(200)
Called from: d:\personal\perito32\Prg\facturas.prg => (b)FACTURA(72)
Called from: => TBUTTON:CLICK(0)
Called from: => TBUTTON:HANDLEEVENT(0)
Called from: .\source\classes\WINDOW.PRG => _FWH(0)
Called from: => SENDMESSAGE(0)
Called from: => TDIALOG:COMMAND(0)
Called from: => TWINDOW:HANDLEEVENT(0)
Called from: => TDIALOG:HANDLEEVENT(0)
Called from: => DIALOGBOXINDIRECT(0)
Called from: => TDIALOG:ACTIVATE(0)
Called from: d:\personal\perito32\Prg\facturas.prg => FACTURA(81)
Called from: d:\personal\perito32\Prg\perito32.prg => (b)BUILDMENU(117)
Called from: => TMENU:COMMAND(0)
Called from: => TWINDOW:COMMAND(0)
Called from: => TMDIFRAME:COMMAND(0)
Called from: => TMDIFRAME:HANDLEEVENT(0)
Called from: .\source\classes\WINDOW.PRG => _FWH(0)
Called from: => WINRUN(0)
Called from: => TMDIFRAME:ACTIVATE(0)
Called from: d:\personal\perito32\Prg\perito32.prg => MAIN(96)

Me imagino que debe ser un problema de enlazado, ya que he compilado y enlazado directamente el archivo Tword.prg.

Una ayuda, por favor.

Saludos

un trozo de codigo

PostPosted: Fri Nov 07, 2008 8:51 pm
by Ramon Paredes
Fernando,

Si pusieses un trozo de codigo donde se origina el error te podriamos echar una mano,

Saludes desde Managua, Nicaragua

Ramon Paredes

Re: un trozo de codigo

PostPosted: Sat Nov 08, 2008 11:07 am
by fergonm
Ramon Paredes wrote:Fernando,

Si pusieses un trozo de codigo donde se origina el error te podriamos echar una mano,

Saludes desde Managua, Nicaragua

Ramon Paredes


Muchas gracias por responder Ramón.

Como verás el código no puede ser mas simple. Creo, por lo que he leido en los foros, que para crear la librería Tword se debe enlazar la librería de Harbour hbwin32 ya que se precisa la clase Toleauto. He intentado localizarla pero no le he conseguido.

Como ya indicaba, utilizo directamente el código Twordhb.PRG, que compilo y enlazo con el resto de los PRG,s de la aplicación.


Un saludo Desde Zaragoza (España).

PostPosted: Sun Nov 09, 2008 5:50 pm
by fergonm
Perdona Ramón por no incluir el código. Ahí va:


Function Imprime_Factura(aDatos)

LOCAL oWord

oWord:=Tword():New()
oWord:OpenDoc("c:\Usuarios\Fernando\Documentos\Facturas CEFER.DOC")
oWord:Replace("[fecha]", aDatos[6])
oWord:Replace("[factura]",aDatos[5])
oWord:Preview()
oWord:End(.F.)
Return(aDatos)


Como verás se trata de una prueba sencilla. Como ya indicaba creo que l problema es el enlazado ya que me temo que me falta incluir un libreria de harbour.

Ya me contarán.

Un saludo.

PostPosted: Tue Nov 11, 2008 10:34 am
by fergonm
Pueden ayudarme.

Muchas gracias.

PostPosted: Thu Nov 13, 2008 10:51 pm
by dobfivewin
Se solucionó el tema que esta clase (word) que funcione tanto para Word 2003 como para el 2007,

Salen tabulado de distinta forma de una versión a la otra.

gracias

David
argentina

PostPosted: Fri Nov 14, 2008 8:14 am
by fergonm
dobfivewin wrote:Se solucionó el tema que esta clase (word) que funcione tanto para Word 2003 como para el 2007,

Salen tabulado de distinta forma de una versión a la otra.

gracias

David
argentina


David no entiendo qué me quierres decir, ya que no me funciona de ninguna forma, me da error antes de abrir el documento.

Un saludo.

PostPosted: Fri Nov 14, 2008 4:03 pm
by dobfivewin
Disculpas, pensé que ya habias solucionado. Te voy a pasar como lo manejo yo, y que está funcionando.

El problema que tengo que mi aplicación cuando GENERA el documento sale tabulado de distinta forma, en la maquina que se ejecuta el programa, si tengo Ofiice 2003 y 2007.

DE ESTA FORMA YO GENERO EL DOCUMENTO DESDE MI APLICACION

Code: Select all  Expand view
oWord:=Tword():New()
oWord:NewDoc( cOutFile )
oWord:startpage()
oWord:SetCm()
oWord:TextBox(1 ,;
                  2.0   ,;
                  25    ,;
                  20.3  ,;
             'PRUEBA GENERACION DE DOCUMENTO WORD,;
             oFuente5, , , Justi,  ,{0},.t.)

oWord:EndPage() 
oWord:Protect('clave')  // para proteger el Documento
oWord:save()
oWord:End() 



DE ESTA FORMA LO HABRO
Code: Select all  Expand view
oWord:=Tword():New()
oWord:OpenDoc(cOutFile)   // con todo y path
oWord:Preview()



DE ESTA FORMA LO IMPRIMO
Code: Select all  Expand view
oWord:=Tword():New()
oWord:OpenDoc(cOutFile)   // con todo y path
oWord:PrintDoc()


La variable cOutFile debes colocar el nombre del archivo: PEPE.doc

espero que te sea util

un abrazo

david
argentina

PostPosted: Fri Nov 14, 2008 6:57 pm
by fergonm
Gracias David.

Como verás así abro el documento y así intento hacerlo.

OpenDoc() me genera un error ya que me dice que no existe el método GET. Si nos vamos al método OpenDoc, vemos que en efecto ahí está el problema. Por eso pregunto si se debe enlazar alguan librería que no tengo en mi fichero RMK o cuano enlazo con VerCe.

Muchas gracias y un saludo