Page 1 of 2

Necesito Usar Word Con Variables (Equipo se Bloquea)

PostPosted: Mon Sep 23, 2019 5:06 pm
by remtec
Amigos

Muy buen dia.

Amigos, Necesito si alguien dispone de la Clase Tword, que funciones con WIndows 10, que me la pueda compartir por favor.

Muchos Saludos.
Antonio

Re: Solicitud TWord

PostPosted: Mon Sep 23, 2019 6:53 pm
by FranciscoA
Antonio.
Creo que en el post siguiente encontrarás respuesta a lo que necesitas, sin usar la Class TWord.
Lo he probado, y funciona. (Win7,FW1204) Gracias Cesar.

viewtopic.php?f=6&t=34862&start=0&hilit=word+merge&sid=97b3d94ae56594b9de3c7845752eef49#p207274

Saludos.

Re: Solicitud TWord

PostPosted: Mon Sep 23, 2019 7:17 pm
by remtec
Hola Francisco

Muchas gracias por tu ayuda, como siempre atento a los que necesitamos ayuda.

Revisare lo que me sugieres.

Muchos Saludos.

Antonio

Re: Necesito Usar Word Con Variables Urgente

PostPosted: Tue Sep 24, 2019 1:32 am
by remtec
Amigos

Definitivamente lo que tengo que entregar como resultado es Tomar un Archivo Plantilla, Ejemplo "Altura.DOC", reemplazar algunos datos como Nombre, Rut, Direccion y otros, crear un nuevo archivo y guardarlo con el Nro. de Ficha como Nombre, Ejemplo " C65600.DOC " , ademas de imprimir directamente.

He revisado lo que me indica Francisco, pero me perdi, ya que se habla de archivo RTF.

En espera de sus comentarios.

Muchos Saludos.

Antonio.

Re: Necesito Usar Word Con Variables

PostPosted: Tue Sep 24, 2019 4:08 pm
by FranciscoA
Antonio:
El siguiente codigo lo hice basado en un ejemplo de Cesar Gomez ( gracias Cesar )

Aquí utilizo la extension .rtf, pero puedes cambiarla a .Docx

Ejemplo:
Abres Word y creas el documento con los siguientes datos:
Code: Select all  Expand view
Numero RUT  <<RUT>>      //  puedes encerrarlos entre [ ],  < >, << >>, o como quieras
Nombre  <<NOMBRE>>
Pais    <<PAIS>>
 

Guardas el documento con extension .rtf. ó .Docx
CORRIJO: Debe ser guardado como .rtf

Code: Select all  Expand view
Function ReplTextOnWord_2()
LOCAL cText, oWord, oDoc
local cDocPath   := CurDrive() + ":\" + curdir() + "\"
local cDoc       := "
DocuDos.rtf"
local cDocSaveAs := "
DocuDos_TMP.rtf"

  if !file( cDocPath + cDoc )
      MsgStop("
No existe el fichero de plantilla " + cDocPath + cDoc,"Alto")
      return nil
  endif

  if (oWord := WinWordObj() ) == nil
     MsgStop( "
MS Word no instalado" ,"Alto" )        
     return nil
  endif

  cText := MemoRead( cDocPath + cDoc )

  ReplaceText(@cText)
   
  MemoWrit( cDocPath + cDocSaveAs, cText )

  oDoc = oWord:Documents:Open( cDocPath + cDocSaveAs)

  if oDoc == nil
     MsgInfo("
Error de creación del documento " +cDocSaveAs +". Asegúrese que no esté abierto." )          
  endif

  oDoc:Application:Visible := .t.
Return nil

//------------------------------------------------------//
static function ReplaceText(cText)
   cText := StrTran(ctext,"
<<RUT>>"        ,   Alltrim(" 12345678910 ") )
   cText := StrTran(ctext,"
<<NOMBRE>>" ,   Alltrim(" DONALDO TROMPETA ") )  
   cText := StrTran(ctext,"
<<PAIS>>"       ,   Alltrim(" PAIS DE LAS MARAVILLAS ") )  

//Para reemplazar con datos de una DBF, puedes hacer:
//cText := StrTran(ctext,"
<<NOMBRE>>" ,   Alltrim ( (cAlias)->Nombre) )  
//etc, etc...

return nil


Si necesitas algo mas, estamos para colaborar.
Saludos.

Re: Necesito Usar Word Con Variables

PostPosted: Tue Sep 24, 2019 4:16 pm
by FranciscoA
Aqui tienes otro ejemplo que funciona:
http://forums.fivetechsupport.com/viewt ... 10#p191277
saludos.

Re: Necesito Usar Word Con Variables

PostPosted: Wed Sep 25, 2019 1:07 am
by remtec
Hola Francisco

Muchas gracias por toda tu ayuda, un verdadero maestro.

Me tarde un poco en escribir, ya que me pase la tarde probando los codigos y sugerencias que me indicastes.

Es un verdadero dolor de cabeza, Estoy usando Win 10 64 Bits, Fwh 17.09 y tengo instalado Office 365.

Los codigos Bloquean el equipo y los archivos de word quedan abiertos para el sistema y no se pueden cerrar, debo forzar al cierre de la ejecucion por comando de win.

Logre poner en marcha un codigo que abre uun archivo plantilla "RTF" y lo guarda como "DOC", ya que tampoco me deja abrir un " DOC" o "DOCX"., realiza el proceso de reemplazo de variables y luego lo graba, tenia habilitada la opcion de visulizar, pero jamas abrio Word, pero si dejaba grabado el archivo destino como " DOC ", en la carpeta indicada. Este proceso comenzo muy rapido.

Aqui se presenta el problema, despues de unas 10 ejecuciones de la opcion, el equipo se bloqueo en su ejecucion, al punto que la opcion del sistema, ya no respponde y debo forzar su cierre por comando de windows y el archivo que antes era grabago en disco, ya no se genera, esta muy claro, que el consumo de memoria es bastabte grande al punto de no permitir terminar el proceso, despues de varias ejecuciones.

Para mi es bastante grave, ya que pense que habia logrado poner en marcha y dar la solucion al cliente, pero vuelvo a punto Cero, ya que el Cliente, necesita atender aproximamente un promedio de 100 personas y por cada uno, debe generar un certificado que luego de ser impreso, este debe ser guardado como respaldo en su disco.

Amigos, sigo dado dolores de cabeza, alguna idea para solucionar este problema,

Muchos Saludos
Antonio.

Dejo el Código que logre hacer funcionar con el detalle descrito:
Code: Select all  Expand view

Function G_Altura_W()
            Local cTxtFile, oWord, oSel, oDoc,cOrigen,cDestino,cFile,cSave

            cOrigen:=  "C:\Desa\FichasWin\Doc\Doc_Bases\"
        cDestino:="
C:\Desa\FichasWin\Doc\Doc_Bases\"

            cFile:=  "
Alturapru6.rtf"
        cSave:=  "
Alturapru11.doc"

            Nom1="
PACIENTE DE PRUEBA INFORME"
        rut1="
11.111.111-1"
        naci1="
Chilena"


     oWord:=TOleAuto():New( "
Word.Application" )


    TRY
        oDoc := oWord:Documents:Open(cOrigen + cFile)
    CATCH
        MsgInfo("
Error: No Puedo Abrir Archivo Plantilla --> "+cFile)
        oWord:Quit()
        Return NIL
    END


     oDoc:Select()

     oSel = oWord:Selection
     Reemplaza_Text( oSel, "
[nombrepaciente]",AllTrim(Nom1))
         Reemplaza_Text( oSel, "
[rut]",AllTrim(rut1))
         Reemplaza_Text( oSel, "
[naciona]",AllTrim(naci1))


         oDoc:Invoke( "
SaveAs", cDestino + cSave )
         //oWord:Visible:= .T.//;oWnd:Minimize()
         //oDoc:PrintOut()

         oDoc:Invoke('Close',0)
       
                oWord:Quit()


        Return

 Static Function Reemplaza_Text( oSel, cSrc, cRpl)
                oSel:Start = 0
                oSel:End = -1

                WHILE oSel:Find:Execute( cSrc )
                     oSel:Range:Text = cRpl
                ENDDO


            Return nil




Re: Necesito Usar Word Con Variables (Equipo se Bloquea)

PostPosted: Wed Sep 25, 2019 3:49 am
by FranciscoA
Antonio.
He probado tu codigo con una leve modificacion, y aqui me está funcionando. ( lo he ejecutado mas de 30 veces )
Desafortunadamente, no dispongo de W10 ni Oficce 365 para hacer pruebas.
Intenta con el siguiente codigo.
Code: Select all  Expand view
//---------------------------------------------------//
Function G_Altura_W()
   Local oWord, oSel, oDoc,cOrigen,cDestino,cFile,cSave, Nom1,rut1,naci1
   local oActiveDoc,aArrReplace, n

   cOrigen  := "C:\Desa\FichasWin\Doc\Doc_Bases\"
   cDestino := "
C:\Desa\FichasWin\Doc\Doc_Bases\"

   cFile := "
Alturapru6.rtf"
   cSave := "
Alturapru11.doc"

   Nom1  := "
PACIENTE DE PRUEBA INFORME"
   rut1  := "
11.111.111-1"
   naci1 := "
Chilena"
 
   TRY
        oWord := CreateObject("
Word.Application")
    CATCH
        MsgInfo("
Word no está instalado en esta PC. No se puede continuar")
        Return NIL
    END

    TRY
        oDoc := oWord:Documents:Open(cOrigen + cFile)
    CATCH
        MsgInfo("
No se puede abrir el archivo plantilla " + cOrigen + cFile)
        oWord:Quit()
        Return NIL        
    END

    oWord:Visible:=.T.
    oDoc:Select()
    oSel = oWord:Selection

    // Crear Matriz de reemplazos
    aArrReplace := { { "
[nombrepaciente]", AllTrim(Nom1) } ,;
                     { "
[rut]"           , AllTrim(rut1) } ,;
                     { "
[naciona]"       , AllTrim(naci1) } }
                   
    For n:=1 to Len(aArrReplace)
        Reemplaza_Text( oSel, aArrReplace[n][1], aArrReplace[n][2] )                  
    Next n

    oActiveDoc := oWord:Get("
ActiveDocument")
    oActiveDoc:SaveAs(cDestino + cSave)

   * oActiveDoc:PrintOut()

   * oWord:Documents:Close()  
   * oWord:Quit()    
   
    SysRefresh()
Return nil

//---------------------------------------------------//
Static Function Reemplaza_Text( oSel, cSrc, cRpl)
                oSel:Start = 0
                oSel:End = -1

                WHILE oSel:Find:Execute( cSrc )
                     oSel:Range:Text = cRpl
                ENDDO

           Return nil


Tambien con esta function me funciona.
Code: Select all  Expand view
//---------------------------------------------------//
Static Function Reemplaza_Text( oSel, cSrc, cRpl)
    Local wdCollapseEnd:=0
    LOCAL oRng := oSel:Document:Content

    IF AT( cSrc, oRng:Text ) = 0
        RETURN .F.
    ENDIF

    WHILE oRng:Find:Execute( cSrc )
        oRng:Text = cRpl
        oRng:Collapse( wdCollapseEnd )
    ENDDO

RETURN .T.
 


Saludos.

Re: Necesito Usar Word Con Variables (Equipo se Bloquea)

PostPosted: Wed Sep 25, 2019 3:50 am
by Busmatic_wpb
Estimado

Yo utilizo fastresport creo una plantilla y luego exporto los campos a la plantilla. es muy simple rapido y sencillo. Dame un email y te explico este fin de semana y en menos de 10 munutios podras hacerlo que deseas.

Re: Necesito Usar Word Con Variables (Equipo se Bloquea)

PostPosted: Wed Sep 25, 2019 10:36 am
by remtec
Hola Francisco y Busmatic_wpb.

Muy buen, Muchas gracias por ayudarme, como siempre atento a los que lo necesitamos.

Francisco, he probado ambos codigos, tal como los has publicado y se produce el mismo problema, la ejecucion del sistema que ademas tiene solo este codigo, termina por bloquear el equipo, sin dar la posibilidad de cerrar su ejecucion por sistema, debiendo recurrir a terminan forzadamente por windows. Quizas sea un problema de windows 10, pero el clientes es la configuracion que dispone en sus equipos.

He probado en otro notebook nuevo con windows 10 de 64 bits y sucede lo mismo, teniendo office instalado en la version nueva, en un Lenovo i 7, con 8gb Ram.

Busmatic_wpb, disculpa que te mencione asi, ya que no encuentro tu nombre, abusando de tu buena voluntad, te dejo 2 email, don me puedes contactar:
riveraferrada@gmail.com - centrobuin@gmail.com.

Agradeciendo nuevamente la ayuda de ambos, quedo atento a sus comentarios.

Muchos Saludos
Antonio

Re: Necesito Usar Word Con Variables (Equipo se Bloquea)

PostPosted: Wed Sep 25, 2019 1:35 pm
by remtec
Hola Francisco.

Como estas?

He llevado tus codigos a un equipo con mas ANTIGUO, con Windows XP y Office 2010.

TODOS FUNCIONAN PERFECTAMENTE, incluso hasta Carga Word con el nuevo Archivo creado y lo imprime directamente a la impresora.

Pero aca no doy con la SOlución.

Al llevar este mismo sistema a los equipos con Windows 10 con 64 bist y Office 365, que es el caso de mi cliente, esto producen el problema de bloquear el sistema y no crear el archivo en la carpeta. Un verdadero problema y que es el requisito del cliente poder generar este Certificado.

Quedo atento a los comentarios.

Muchos Saludos.

Antonio.

Dejo el ulimo codigo probado:
Code: Select all  Expand view

Function G_Francisco2()
   Local oWord, oSel, oDoc,cOrigen,cDestino,cFile,cSave, Nom1,rut1,naci1
   local oActiveDoc,aArrReplace, n

   cOrigen  := "C:\Desa\FichasWin\Doc\Doc_Bases\"
   cDestino := "
C:\Desa\FichasWin\Doc\Doc_Bases\"

   cFile := "
Alturapru6.rtf"
   cSave := "
Alturapru12.doc"

   Nom1  := "
PACIENTE DE PRUEBA INFORME"
   rut1  := "
11.111.111-1"
   naci1 := "
Chilena"

   TRY
        oWord := CreateObject("
Word.Application")
    CATCH
        MsgInfo("
Word no está instalado en esta PC. No se puede continuar")
        Return NIL
    END

    TRY
        oDoc := oWord:Documents:Open(cOrigen + cFile)
    CATCH
        MsgInfo("
No se puede abrir el archivo plantilla " + cOrigen + cFile)
        oWord:Quit()
        Return NIL
    END

    oWord:Visible:=.T.
    oDoc:Select()
    oSel = oWord:Selection

    // Crear Matriz de reemplazos
    aArrReplace := { { "
[nombrepaciente]", AllTrim(Nom1) } ,;
                     { "
[rut]"           , AllTrim(rut1) } ,;
                     { "
[naciona]"       , AllTrim(naci1) } }

    For n:=1 to Len(aArrReplace)
        Reemplaza_Text_F2( oSel, aArrReplace[n][1], aArrReplace[n][2] )
    Next n

    oActiveDoc := oWord:Get("
ActiveDocument")
    oActiveDoc:SaveAs(cDestino + cSave)

    oActiveDoc:PrintOut()

   * oWord:Documents:Close()
   * oWord:Quit()

    SysRefresh()
Return nil

//---------------------------------------------------//
Static Function Reemplaza_Text_F2( oSel, cSrc, cRpl)
    Local wdCollapseEnd:=0
    LOCAL oRng := oSel:Document:Content

    IF AT( cSrc, oRng:Text ) = 0
        RETURN .F.
    ENDIF

    WHILE oRng:Find:Execute( cSrc )
        oRng:Text = cRpl
        oRng:Collapse( wdCollapseEnd )
    ENDDO

RETURN .T.


Re: Necesito Usar Word Con Variables (Equipo se Bloquea)

PostPosted: Wed Sep 25, 2019 4:20 pm
by FranciscoA
Antonio.
Has probado ejecutar el programa como administrador?. A lo mejor es un problema de permisos en Windows 10 64b
Click derecho sobre el icono del programa, ejecutar como administrador.

En algunos clientes me ha sucedido ( aunque sin bloqueo del equipo ), y ejecutando como administrador se ha solucionado.

En este momento voy hacia donde un amigo que tiene un ciber, a ver si tiene windows 10 64b y Office actual.

Saludos.

Re: Necesito Usar Word Con Variables (Equipo se Bloquea)

PostPosted: Wed Sep 25, 2019 9:52 pm
by remtec
Hola Francisco

He probado tu ultima sugerencia e ejecutado el programa como administrador y nada, el mismo problema, no genera el archivo en el disco y bloquea la ejecucion de cualquier opcion del Programa. Debo terminar su ejecucion forzada por sistema.

El mismo programa en Windows XP y Office 2010, funciona perfecto.

Algun amigo que le haya sucedido algo parecido?.

Muchos Saludos

Antonio

Re: Necesito Usar Word Con Variables (Equipo se Bloquea)

PostPosted: Wed Sep 25, 2019 10:16 pm
by FranciscoA
Antonio.
Francamente es raro.
Acabo de probarlo en Windows 10 Home 64b y Office 2016 y funciona correctamente.

Talvez otros colegas hayan pasado por ese problema, y puedan aportar alguna solución.
Saludos.

Re: Necesito Usar Word Con Variables (Equipo se Bloquea)

PostPosted: Wed Sep 25, 2019 10:51 pm
by remtec
Hola Francisco

Descubri que algo sucede con el archivo Plantilla RTF en Windows 10 y Office 365 en el caso del cliente. Como mente el mismo programa y RTF, en windows XP y Office 2010, funciona muy bien, pero en windows 10 esto no sucede.

Pues bien, he generado una nueva plantilla RTF, corro el mismo programa en windows 10 y funciona, pero el cabo de unas 15 ejecuciones, el programa no corre mas.

Para mi un verdadero problema y dolor de cabeza, para los maestros cual sera la explicacion?

Al tratar de abrir la plantilla directamente por Word, emite un error: " La ultima ves que se abrio Plantilla6.rtf, se provoco un error grave"

Muchos Saludos.

Antonio