Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Lazarus, FreePascal, Kylix, etc. (https://www.clubdelphi.com/foros/forumdisplay.php?f=14)
-   -   Richmemo para word (https://www.clubdelphi.com/foros/showthread.php?t=89300)

El_Chava 29-10-2015 17:52:20

Richmemo para word
 
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.

AgustinOrtu 29-10-2015 19:28:23

Guardandolo como .doc? :D

Que codigo estas usando para enviar la informacion?

El_Chava 29-10-2015 22:40:16

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

Código:

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. ^\||/

AgustinOrtu 29-10-2015 23:10:34

Gracias por compartirlo

De hecho te iba a proponer mas o menos lo mismo, pero no sabia como lo estabas mandando a word

Saludos

El_Chava 30-10-2015 16:22:42

De nada para eso estamos para compartir soluciones. Saludos :D^\||/


La franja horaria es GMT +2. Ahora son las 21:02:27.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi