Abrir un documento word.

HMG en Español

Moderator: Rathinagiri

Post Reply
User avatar
edufloriv
Posts: 240
Joined: Thu Nov 08, 2012 3:42 am
DBs Used: DBF, MariaDB, MySQL, MSSQL, MariaDB
Location: PERU

Abrir un documento word.

Post by edufloriv »

Saludos amigos,

Estoy intentando abrir un documento word existente y realizar el reemplazo de algunas cadenas de texto dentro del mismo para finalmente enviarlo a la impresora.

Hice este codigo adaptado de Visual Basic:

Code: Select all

   cDoc := Getdesktopfolder() + "\" + "CIRCULAR - Clientes - FARMACOM.docx"
   oWord := CreateObject( "Word.Application" )
   oDoc := oWord:Documents:Open(cDoc)
   oDoc:Selection:Find:ClearFormatting()
   oDoc:Selection:Find:Text := "[ESTAB_CODIGO]"
   oDoc:Selection:Find:Replacement:Text := ALLTRIM( aClieX[1,2] ) + " (" + aClieX[1,1] + ")"
   oDoc:Selection:Find:Execute( "Replace:=WdReplace.wdReplaceAll" )
   oDoc:PrintOut()
   oDoc:Close()
   oWord:Quit()

   RELEASE oDoc
   RELEASE oWord
Compila todo ok, pero al ejecutarlo me lanza este error:
Date:04/09/23 Time: 15:18:30
Error WINOLE/1009 No existe el m‚todo: SELECTION (DOS Error -2147352570)

Called from TOLEAUTO:SELECTION(0)
Called from CARTAS_IMPRIMIR(132)
Called from (b)CARTASACLIENTES(53)
Called from _DOCONTROLEVENTPROCEDURE(6033)
Called from EVENTS(1794)
Called from DOMESSAGELOOP(0)
Called from _ACTIVATEWINDOW(5694)
Called from CARTASACLIENTES(66)
Called from EJECUTAOPCION(321)
Called from (b)MAIN(121)
Called from EVENTS(3225)
Called from DOMESSAGELOOP(0)
Called from _ACTIVATEWINDOW(5694)
Called from MAIN(162)
Tambien probé retirando el metodo :selection, pero se queda colgado al momento de ejecutar. Alguien tiene experiencia con este tema que me pueda echar una cuerda. Mil gracias adelantadas.

Eduardo Flores Rivas


LIMA - PERU
User avatar
luisvasquezcl
Posts: 1261
Joined: Thu Jul 31, 2008 3:23 am
Location: Chile
Contact:

Re: Abrir un documento word.

Post by luisvasquezcl »

Hola Eduardo.,
Ve el siguiente enlace
https://learn.microsoft.com/es-es/offic ... .selection
Ahí podrás ver cómo funciona el objeto selección.
Espero te sea de ayuda.
Saludos desde chile
Luis Vásquez
branislavmil
Posts: 10
Joined: Sat Sep 29, 2018 3:36 pm
DBs Used: DBF

Re: Abrir un documento word.

Post by branislavmil »

oFile:=oWord:Documents:Open( cDoc )
oDoc := oWord:Selection()

WordReplace( oDoc, "<contract_no>", str(j)+"/TEST/APR/2019" )
WordReplace( oDoc, "<contract_date>", dtoc(date()+j) )
branislavmil
Posts: 10
Joined: Sat Sep 29, 2018 3:36 pm
DBs Used: DBF

Re: Abrir un documento word.

Post by branislavmil »

Hello
Try this way..
...
WordReplace( oDoc, "[ESTAB_CODIGO]", ALLTRIM( aClieX[1,2] ) + " (" + aClieX[1,1] + ")" )
...
FUNCTION WORDREPLACE( oSel, cSrc, cRpl )

oSel:Start = 0; oSel:End = -1

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

RETURN NIL
edk
Posts: 999
Joined: Thu Oct 16, 2014 11:35 am
Location: Poland

Re: Abrir un documento word.

Post by edk »

You can also do it this way: ( https://learn.microsoft.com/en-us/offic ... nd.execute )

Code: Select all

#define wdFindContinue 1		//  https://learn.microsoft.com/en-us/office/vba/api/word.wdfindwrap
#define wdReplaceAll   2 		//  https://learn.microsoft.com/en-us/office/vba/api/word.wdreplace
#define wdReplaceOne   1
#define wdReplaceNone  0

  cDoc := Getdesktopfolder() + "\" + "CIRCULAR - Clientes - FARMACOM.docx"
  oWord := CreateObject( "Word.Application" )
  oDoc := oWord:Documents:Open(cDoc)

  cFindText    := "[ESTAB_CODIGO]"
  cReplaceWith := ALLTRIM( aClieX[1,2] ) + " (" + aClieX[1,1] + ")"

  oDoc:Content:Find:Execute ( cFindText        /* FindText */, ;
                              .F.              /* MatchCase */, ;
                              .F.              /* MatchWholeWord */, ;
                              .F.              /* MatchWildcards */, ;
                              .F.              /* MatchSoundsLike */, ;
                              .F.              /* MatchAllWordForms */, ;
                              .T.              /* Forward */, ;
                              wdFindContinue   /* Wrap */, ;
                              .F.              /* Format */, ;
                              cReplaceWith     /* ReplaceWith */, ;
                              wdReplaceAll     /* Replace */, ;
                              .F.              /* MatchKashida */, ;
                              .F.              /* MatchDiacritics */, ;
                              .F.              /* MatchAlefHamza */, ;
                              .F.              /* MatchControl */ )

  oDoc:PrintOut()
  oDoc:Close()
  oWord:Quit()

  RELEASE oDoc
  RELEASE oWord
Depending on what you want to do:
  • if you want to replace all found occurrences of the search text, use the Replace parameter as wdReplaceAll;
  • if you want to replace only first occurrence, use the Replace parameter as wdReplaceOne;
  • if you don't want to replace then use the Replace parameter as wdReplaceNone
Post Reply