Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   modificar una plantilla de word (https://www.clubdelphi.com/foros/showthread.php?t=59422)

luxus 26-08-2008 19:11:09

modificar una plantilla de word
 
Hola amigos,

¿Me podriais indicar cómo puedo abrir una plantilla de Word, el cual ya tiene su encabezado y pie de pagina para rellenar el texto que quiero añadir a partir de una aplicación en delphi?


En otras palabras, pulsando un boton en la aplicación se debería abrir una plantilla de word y rellenar la informacion de un memo en el que voy cargando el texto que quiero mostrar al final en el archivo de word.

Gracias y un saludo

roman 26-08-2008 19:37:41

No estoy seguro, pero quizá lo de este hilo te sirva.

// Saludos

luxus 26-08-2008 19:57:05

Documentos de Word
 
Hola Roman,

Muchas gracuas por tu rápida respuesta. En verdad, es más sencillo de lo que te he explicado. Supongamos que tengo un archivo de word que se llama plantilla.doc.

Lo que quiero hacer es que la aplicación abra dicho archivo (plantilla.doc) y luego se vuelca el texto que tengo un memo al archivo de word.

Gracias por tu ayuda

roman 26-08-2008 20:29:01

Pues aplica por igual. Aquí un ejemplo:

Código Delphi [-]
var
  Word: Variant;
  Documento: Variant;
  Texto: String;

begin
  (* Creas un objeto Word *)
  Word := CreateOleObject('Word.Application');

  (* Añades un documento basado en la plantilla *)
  Word.Documents.Add('C:\ruta\al\memo.dot');
  Documento := Word.Documents.Item(1);

  (* Copias el texto del memo al documento *)
  Texto := StringReplace(Memo1.Lines.Text, #13#10, #13, [rfReplaceAll]);
  Documento.Variables.Add('texto', Texto);

  (* Actualizas el campo *)
  Documento.Fields.Update;

  (* Fuerzas a mostrar el contenido del campo *)
  Word.ActiveWindow.View.ShowFieldCodes := false;

  Word.Visible := true;
end;

Aquí, memo.dot es una plantilla de Word así:

Código:

A quien corresponda

{ DOCVARIABLE  texto  \* MERGEFORMAT }

Gracias.

// Saludos

luxus 26-08-2008 20:48:20

Plantilla
 
Hola Roman

Muchas gracias por tu respuesta. ¿Me podrías decir como puedo implementar la plantilla memo.dot?

Yo he creado una plantilla en word pero no tengo ni idea como asociar la variable

{ DOCVARIABLE texto \* MERGEFORMAT }
Gracias por tu ayuda

roman 26-08-2008 20:54:20

Está escrito en el hilo que te indiqué. Sólo tienes que ir al menú Insertar|Campo y escoger el que dice DocVariable. Te pregunta cuál es el nombre que quieres para el campo y ahí escribes texto o como quieras llamarle con tal de que coincida con el que uses en el código delphi:

Código Delphi [-]
Documento.Variables.Add('texto', Texto);

// Saludos

luxus 26-08-2008 20:56:09

Error
 
Hola Roman

Este es el codigo que he implementado:

Word := CreateOleObject('Word.Application');
aux:=ExtractFilePath(Application.ExeName)+'\Archivos\certificado de asistencia.dot';
Word.Documents.Add(aux);


Una vez que llega a este punto me sale el siguiente error:

"WORD NO PUEDE LEER ESTE DOCUMENTO. PUEDE QUE ESTE DAÑADO.
PRUEBE LO SIGUIENTE:
* ABRA Y REPARE EL ARCHIVO.
* ABRA EL ARCHIVO CON EL CONVERTIDOR DE TEXTO"

¿Cual es el error?

roman 26-08-2008 21:00:20

Asegúrate que la ruta sea correcta. Si mal no recuerdo, ExtractFilePath ya incluye la diagonal final, de manera que tendrías que omitir la que pones antes de Archivo.

Nota: Por favor, usa las etiquetas [delphi] para el código que pongas aquí.

// Saludos

luxus 26-08-2008 21:08:27

Error
 
Hola Roman,

Perdona las molestias que te pueda causar.

Tal como dijiste ExtractFilePath ya incluye la diagonal, así que corregí este fallo y me sigue indicando el mismo error.

Tengo el office 2007 aunque he creado la plantilla usando el modo compatibilidad con office 2003. Me parece que el error no está por este lado ¿no?

roman 26-08-2008 21:13:48

Cuando hice la prueba del código que te puse, me salía el mismo error hasta que me di cuenta que no le estaba poniendo la ruta exacta. Prueba primero ponérsela directo.

// Saludos


La franja horaria es GMT +2. Ahora son las 08:33:54.

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