Hola amigos del foro tengo problema que espero y me puedan ayudar a resolver y es el siguiente. Actualmente ando trabajando un mini procesador de texto en lazarus utilizando el componente RichMemo que seria el RichEdit en delphi. Ahora bien lo que necesito hacer es que el contenido que tenga RichMemo se envie a un documento en word y que conserve el formato del documento. Qué respete si puso en negrita, cursiva, subrayado, los tabs, etc.. y se visualice en el documento en word. El documento en word esta en formato RTF. Ya que las pruebas que he realizado si se envia la información pero no conserva el formato del richMemo. Espero haberme explicado bien y de antemano muchas gracias por sus respuestas.
Richmemo para word
Started by
El_Chava
, Oct 29 2015 10:52 AM
1 reply to this topic
#1
Posted 29 October 2015 - 10:52 AM
#2
Posted 29 October 2015 - 03:42 PM
Bueno al fin dí con una solución no se si será la más adecuada pero hace lo que necesito. Para esto se uso un marcador en donde se insertara lo contenido en el richMemo. Al final lo que utilice es que lo que contenga en el richmemo lo coopio al portapapeles y al final realizo un pegado especial en el documento word. Aquí les dejo el código.
delphi
var Word,marcador,doc1: Variant; w:widestring; try {* a la variable "w" le asigno la ruta donde se encuentra la plantilla a utilizar *} w:= UTF8Decode(ExtractFilePath(application.ExeName)+'plantillas\Respuesta01.rtf'); Word := CreateOleObject('Word.Application'); (* Añades un documento basado en la plantilla *) Documento := Word.Documents.Add(w); Documento := Word.Documents.Item(1); doc1:= Word.ActiveDocument; RichMemo1.SelectAll; {Se selecciona todo el texto que contenga el Rich memo} RichMemo1.CopyToClipboard {Se copia lo seleccionado al portapapeles}; Richmemo1.SelLength:=0 {se quita la selección}; if Doc1.Bookmarks.Exists('prueba') then {Chequea si existen las marcas en el documento} Begin Doc1.Bookmarks.Item('prueba').Range.PasteSpecial; {Se realiza el pegado especial del portapapeles en el marcador creado en el documento de word} end; Word.Visible := true; {Make Word visible} Clipboard.Clear;{se limpia el portapales} except on E: Exception do ShowMessage(SysToUTF8(E.Message)); end;
Para limpiar el portapaples es necesario que usar el unit Clipbrd. Espero y les sirva este metodo. Saludos. ^\||/