Hola, yo estoy usando esto. Tomo un modelo (en formato RTF) y le cargo los datos de una tabla.
- Code: Select all Expand view
***************************************
** Emitir Actas
STATIC FUNCTION Acta (cDoc)
LOCAL cText, oWord, oDoc
cText := MEMOREAD(hb_CurDrive()+":\"+curdir()+"\Modelos\"+cDoc+".rtf")
IF !FILE(hb_CurDrive()+":\"+curdir()+"\Modelos\"+cDoc+".rtf")
MsgStop("El archivo base no existe"+chr(10)+cDoc,"Error")
RETURN nil
ENDIF
TransformarTexto(@cText)
MemoWrit( hb_CurDrive()+":\"+curdir()+"\Impresion\"+cDoc+".Temp.rtf", cText )
IF (oWord := WinWordObj() ) == nil
MsgAlert( "MS Word no instalado" , "Alerta" )
ELSE
oDoc = oWord:Documents:Open(hb_CurDrive()+":\"+curdir()+"\Impresion\"+cDoc+".Temp.rtf")
IF oDoc == nil
MsgAlert("Fallo crear documento, verifique que no este en uso" , "Alerta" )
ENDIF
ENDIF
oDoc:Application:Visible := .t.
RETURN nil
***********************************************************
** Hacer el RTF
STATIC FUNCTION TransformarTexto(cText)
cText := STRTRAN(ctext,"<<RUT>>" ,ALLTRIM(datos->RUT) )
cText := STRTRAN(ctext,"<<NOMBRE>>" ,ALLTRIM(datos->nombre) )
RETURN nil
Claramente en el modelo, donde tiene que ir el RUT y el NOMBRE, los pongo entre <<>>
Entiendo que necesitas imprimir en un mismo paso varios registros. Pero te puede servir como idea inicial