Necesito Usar Word Con Variables (Equipo se Bloquea)

remtec
Posts: 431
Joined: Fri May 12, 2017 2:50 pm

Necesito Usar Word Con Variables (Equipo se Bloquea)

Post 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
Last edited by remtec on Wed Sep 25, 2019 1:08 am, edited 2 times in total.
User avatar
FranciscoA
Posts: 1964
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.

Re: Solicitud TWord

Post 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.

http://fivetechsupport.com/forums/viewt ... 49#p207274

Saludos.
Francisco J. Alegría P.
Chinandega, Nicaragua.

Fwxh1204-MySql-TMySql
remtec
Posts: 431
Joined: Fri May 12, 2017 2:50 pm

Re: Solicitud TWord

Post 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
remtec
Posts: 431
Joined: Fri May 12, 2017 2:50 pm

Re: Necesito Usar Word Con Variables Urgente

Post 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.
User avatar
FranciscoA
Posts: 1964
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.

Re: Necesito Usar Word Con Variables

Post 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

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

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.
Last edited by FranciscoA on Tue Sep 24, 2019 4:55 pm, edited 3 times in total.
Francisco J. Alegría P.
Chinandega, Nicaragua.

Fwxh1204-MySql-TMySql
User avatar
FranciscoA
Posts: 1964
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.

Re: Necesito Usar Word Con Variables

Post by FranciscoA »

Aqui tienes otro ejemplo que funciona:
http://forums.fivetechsupport.com/viewt ... 10#p191277
saludos.
Francisco J. Alegría P.
Chinandega, Nicaragua.

Fwxh1204-MySql-TMySql
remtec
Posts: 431
Joined: Fri May 12, 2017 2:50 pm

Re: Necesito Usar Word Con Variables

Post 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

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



User avatar
FranciscoA
Posts: 1964
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.

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

Post 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

//---------------------------------------------------//
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

//---------------------------------------------------//
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.
Last edited by FranciscoA on Wed Sep 25, 2019 3:56 am, edited 2 times in total.
Francisco J. Alegría P.
Chinandega, Nicaragua.

Fwxh1204-MySql-TMySql
User avatar
Busmatic_wpb
Posts: 162
Joined: Wed Feb 22, 2017 2:19 am

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

Post by Busmatic_wpb »

Estimado

Yo utilizo fastresport creo una plantilla y luego exporto _ 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.
Regards.
S.I.T.U.
Sistemas Inteligentes de transporte urbano
http://www.situcr.com
_@Situcr.com
Desarrollos BA4/B4j androide
remtec
Posts: 431
Joined: Fri May 12, 2017 2:50 pm

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

Post 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
remtec
Posts: 431
Joined: Fri May 12, 2017 2:50 pm

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

Post 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

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.

User avatar
FranciscoA
Posts: 1964
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.

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

Post 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.
Francisco J. Alegría P.
Chinandega, Nicaragua.

Fwxh1204-MySql-TMySql
remtec
Posts: 431
Joined: Fri May 12, 2017 2:50 pm

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

Post 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
User avatar
FranciscoA
Posts: 1964
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.

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

Post 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.
Francisco J. Alegría P.
Chinandega, Nicaragua.

Fwxh1204-MySql-TMySql
remtec
Posts: 431
Joined: Fri May 12, 2017 2:50 pm

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

Post 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
Post Reply