Lo que hago es tomar el texto del rtf y le saco el principio y fin de archivo (que lo mire con un editor como el Sublime) donde conte los caracteres que habia en el encabezado y en el fin de archivo. Luego si use el formato que te habia pasado.
Te lo pase a dbf porque entendi que era lo que estabas usando
- Code: Select all Expand view
#include "FiveWin.Ch"
FUNCTION Main()
use clientes
Merge('clientes','TEST1')
RETURN nil
*************************************************
** Armar documento rtf
*************************************************
PROCEDURE Merge(oRs,cDocu)
LOCAL oWord , oDoc, cText := "", cDoc , i, cTextBase, cIniArchivo,cFinArchivo
IF !FILE(hb_CurDrive()+":\"+curdir()+"\"+ALLTRIM(cDocu)+".rtf")
MsgStop("El archivo base no existe"+chr(10)+cDoc,"Error")
RETURN
ENDIF
cTextBase := MEMOREAD(hb_CurDrive()+":\"+curdir()+"\"+ALLTRIM(cDocu)+".rtf") // Leo el RTF
cIniArchivo := LEFT(cTextBase,87+86) // Guardo el encabezado
cFinArchivo := RIGHT(cTextBase,4) // Guardo el fin de archivo
cTextBase := SUBSTR(cTextBase,87+86,LEN(cTextBase)-87-87-3) // Obtengo el texto RTF sin encabezado ni fin de archivo
DO WHILE !(oRs)->(EOF())
cText := cText + cTextBase // Voy agregando a cText el texto sin encabezado ni fin
FOR i := 1 TO (oRs)->(FCount())
IF VALTYPE((oRs)->(Fieldget(i))) == "C"
cText := STRTRAN(ctext,"<"+(oRs)->(FieldName(i))+">",ALLTRIM((oRs)->(Fieldget(i)))) // Reemplazo los campos, yo reemplazo todos, pero podes decir ue campos reemplazar
ENDIF
NEXT i
(oRs)->(DBSkip())
ENDDO
cText := cIniArchivo + cText + cFinArchivo // Al texto con los reemplazos le pego el inicio y fin de archivo
memowrit( hb_CurDrive()+":\"+curdir()+"\"+ALLTRIM(cDocu)+" RESULTADO.rtf", cText ) // Grabo el nuevo texto en un solo archivo
if (oWord := WinWordObj() ) == nil
MsgAlert( "MS Word no instalado" , "Alerta" )
else
oDoc = oWord:Documents:Open(hb_CurDrive()+":\"+curdir()+"\"+ALLTRIM(cDocu)+" RESULTADO.RTF") // Lo abro con Word
if oDoc == nil
MsgAlert("Fallo crear documento, verifique que no este en uso" , "Alerta" )
endif
endif
oDoc:Application:Visible := .t.
RETURN
Es medio medio, pero para lo que vos necesitas te va a servir.
Saludos
PD: Soy Cesar