Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Go Back   Foros Club Delphi > Principal > Servers
Register FAQ Members List Calendar Guía de estilo Today's Posts

Reply
 
Thread Tools Search this Thread Display Modes
  #1  
Old 18/04/2006
Manuel's Avatar
Manuel Manuel is offline
Miembro
 
Join Date: May 2003
Location: San Pedro de la Paz/Chile
Posts: 324
Poder: 24
Manuel Va por buen camino
Wink Insertar datos a word

Holas amigos del foro, hace tiempo que tengo la idea siguiente:

terner una plantilla en word mas o menos asi:

Señor
{nombre}
{direccion}

Estimado, le comunicamos que con fecha {fecha}, usted tiene una deuda de {deuda}, le rogamos regularizar su situacion.

Atentamen el cobrador

Ahora, los datos en {}, deberiaqn ser sacados de una base de datos en interbase y crear una aplicacion que fuera insertando esos datos en word, es posible?, me gustaria mucho si me dieron algunas ideas, gracias
__________________
Manuel Muñoz L. Trabajando con delphi 7.0 , migrando sistema a Delphi XE8, matando BDE y pasando FIREDAC.
Reply With Quote
  #2  
Old 18/04/2006
roman's Avatar
roman roman is offline
Moderador
 
Join Date: May 2003
Location: Ciudad de México
Posts: 20,269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Es muy sencillo. Creas la plantilla .dot en Word usando campos de tipo DocVariable (menú Insertar|Campo). A cada campo le asignas un nombre al momento de insertarlo. El documento .dot te quedaría más o menos así:

Señor
{ DOCVARIABLE nombre\* MERGEFORMAT }
{ DOCVARIABLE direccion\* MERGEFORMAT }

Estimado, le comunicamos que con fecha { DOCVARIABLE fecha\* MERGEFORMAT }, usted tiene una deuda de { DOCVARIABLE deuda\* MERGEFORMAT }, le rogamos regularizar su situacion.

Atentamen el cobrador
Conviene que actives la visualización de campos en el menú Herramientas|Opciones|Ver.

En Delphi, puedes llenar la plantilla así:

Código Delphi [-]
uses ComObj;

...

var
  Word: Variant;
  Documento: Variant;

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

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

  (* Asignas valores a los campos *)
  Documento.Variables.Add('nombre', 'pepe pérez');
  Documento.Variables.Add('direccion', 'domicilio conocido');
  Documento.Variables.Add('fecha', '1976-02-29');
  Documento.Variables.Add('deuda', '$1.00 m.n');
end;

Claro está que los valores que asignes a los campos los puedes tomar de una consulta a la base de datos o de cualquier otra fuente.

// Saludos
Reply With Quote
  #3  
Old 19/04/2006
CamiloU CamiloU is offline
Miembro
 
Join Date: Dec 2005
Location: Sincelejo - COlombia
Posts: 59
Poder: 21
CamiloU Va por buen camino
Me intereso el huilo y segui las instrucciones de Roman. Pero tengo una duda. Como puedo ver los resultados? Ejecute la aplicación pero no vi resultados en la plantilla. Es necesario realizar algún paso adicional?

Muchas Gracias.
Reply With Quote
  #4  
Old 19/04/2006
[egostar] egostar is offline
Registrado
 
Join Date: Feb 2006
Posts: 6,572
Poder: 27
egostar Va camino a la fama
Post

Aqui un link de Microsoft que creo te puede servir tambien.

Saludos.
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney
Reply With Quote
  #5  
Old 19/04/2006
roman's Avatar
roman roman is offline
Moderador
 
Join Date: May 2003
Location: Ciudad de México
Posts: 20,269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Quote:
Originally Posted by CamiloU
Ejecute la aplicación pero no vi resultados en la plantilla. Es necesario realizar algún paso adicional?
Sí bueno, me faltó ese detallito

Después de los pasos anteriores necesitas visualizar Word con

Código Delphi [-]
Word.Visible := true;

Con esto debe aparecerte ya la ventana de Word con el nuevo documento.

// Saludos
Reply With Quote
  #6  
Old 02/05/2006
Manuel's Avatar
Manuel Manuel is offline
Miembro
 
Join Date: May 2003
Location: San Pedro de la Paz/Chile
Posts: 324
Poder: 24
Manuel Va por buen camino
gracias roman

segui los pasos que dijiste incluso el Word.Visible := true; me muestra la carta pero no los datos: justo como lo dijiste, use casi el mismo ejemplo, la plantilla asi:

Quote:
Carta

El señor
{ DOCVARIABLE nombres \* MERGEFORMAT}
Quote:
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,ComObj,
StdCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
var
Word: Variant;
Documento: Variant;
begin
(* Creas un objeto Word *)
Word := CreateOleObject('Word.Application');

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

(* Asignas valores a los campos *)
Documento.Variables.Add('nombres', 'pepe ');
Word.Visible := true;
end;

end.
__________________
Manuel Muñoz L. Trabajando con delphi 7.0 , migrando sistema a Delphi XE8, matando BDE y pasando FIREDAC.
Reply With Quote
  #7  
Old 02/05/2006
roman's Avatar
roman roman is offline
Moderador
 
Join Date: May 2003
Location: Ciudad de México
Posts: 20,269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
¡Vaya! ¡Qué omisión! Acabo de revisar una vez más el código donde tengo implementado algo similar y veo que, en efecto, olvidaba algo que parece ser imprescindible.

Código Delphi [-]
Documento.Variables.Add('nombres', 'pepe ');
Documento.Fields.Update;
Word.Visible := true;

Espero que ahora sí.

// Saludos
Reply With Quote
  #8  
Old 09/06/2006
Manuel's Avatar
Manuel Manuel is offline
Miembro
 
Join Date: May 2003
Location: San Pedro de la Paz/Chile
Posts: 324
Poder: 24
Manuel Va por buen camino
hola roman, gracias por tu ayuda pero de todas meneras me muestra el doc, pero sigue apereciendo con el nombre de campo en vez del valor.
__________________
Manuel Muñoz L. Trabajando con delphi 7.0 , migrando sistema a Delphi XE8, matando BDE y pasando FIREDAC.
Reply With Quote
  #9  
Old 08/08/2006
toorbye toorbye is offline
Miembro
 
Join Date: Sep 2005
Posts: 24
Poder: 0
toorbye Va por buen camino
Hola, a mi el ejemplo me funciona correctamente, pero tengo una duda. Me gustaria que automaticamente el documento se guardara con un nombre que yo especificara. Busque en google pero no encontre nada, lo unico el parametro Save, Word.Documents.Save; que hace que se habra un cuadro de dialogo pidiendo el nombre del archivo. Pero a mi lo que me gustaria es que ya puediera especificar de modo transparente al usuario el nombre del archivo.
un saludo y gracias
Reply With Quote
  #10  
Old 25/08/2006
jjkballero jjkballero is offline
Registrado
 
Join Date: Aug 2006
Posts: 5
Poder: 0
jjkballero Va por buen camino
Smile No actualiza los datos

He probado el código que proponéis, pues es justamente lo que llevaba buscando un tiempo, el problema es que no me actualiza la sentencia de word y el documento lo abre pero sin los datos que le envío desde Delphi, que mas nos podría faltar en este código. Gracias de antemano.
Reply With Quote
  #11  
Old 25/08/2006
jjkballero jjkballero is offline
Registrado
 
Join Date: Aug 2006
Posts: 5
Poder: 0
jjkballero Va por buen camino
Solucionado en primera orden

Probando he visto que los campos de Word hay que activarlos y listo.
Reply With Quote
  #12  
Old 26/08/2006
Manuel's Avatar
Manuel Manuel is offline
Miembro
 
Join Date: May 2003
Location: San Pedro de la Paz/Chile
Posts: 324
Poder: 24
Manuel Va por buen camino
Como, activarlos?
__________________
Manuel Muñoz L. Trabajando con delphi 7.0 , migrando sistema a Delphi XE8, matando BDE y pasando FIREDAC.
Reply With Quote
  #13  
Old 28/08/2006
jjkballero jjkballero is offline
Registrado
 
Join Date: Aug 2006
Posts: 5
Poder: 0
jjkballero Va por buen camino
Activar los campos

Estoy buscando la forma de activar directamente los campos desde Delphi, pues ocurre lo siguiente.

Desde el propio Word hay que ir campo por campo uno a uno, entonces necesito desde delphi abrir el documento de word activando los campos, me imagino que estos campos deben tener una propiedad para activarlos, será de esta forma o bien creando una macro en word y ejecutarla desde Delphi, voy a probar a ver si lo consigo, si alguien lo consigue antes que yo, que lo diga, gracias,
Reply With Quote
  #14  
Old 28/08/2006
jjkballero jjkballero is offline
Registrado
 
Join Date: Aug 2006
Posts: 5
Poder: 0
jjkballero Va por buen camino
Smile Lo encontré

Para activar los variables en word basta con lanzar la siguiente instrucción:

documento.Fields.ToggleShowCodes y con esto conseguimos activar los campos en word y por tanto que se muestren los datos.
Reply With Quote
  #15  
Old 28/08/2006
Manuel's Avatar
Manuel Manuel is offline
Miembro
 
Join Date: May 2003
Location: San Pedro de la Paz/Chile
Posts: 324
Poder: 24
Manuel Va por buen camino
sigo con problemas, este mi código delphi
Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var
  Word: Variant;
  Documento: Variant;

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

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

  (* Asignas valores a los campos *)
  Documento.Variables.Add('nombres', 'pepe pérez');
  documento.Fields.ToggleShowCodes;
  Documento.Fields.Update;

  Word.Visible := true;


end;


esta es mi plantilla:

Carta

El señor

{MERGEFIELD nombres \* MERGEFORMAT}



ewl resulto me sale exactamente lo mismo que la plantilla
__________________
Manuel Muñoz L. Trabajando con delphi 7.0 , migrando sistema a Delphi XE8, matando BDE y pasando FIREDAC.
Reply With Quote
  #16  
Old 29/08/2006
jjkballero jjkballero is offline
Registrado
 
Join Date: Aug 2006
Posts: 5
Poder: 0
jjkballero Va por buen camino
Yo lo tengo casi igual

Mira yo tengo el código igual solo que el update de las variables lo hago antes que el ToggleShowCodes y me funciona.

No se si las variables de word las insertas a mano o desde la opción

Insertar --> Campo y seleccionas la opción DocVariable

A ver si está ahí la cuestión.
Reply With Quote
  #17  
Old 29/08/2006
roman's Avatar
roman roman is offline
Moderador
 
Join Date: May 2003
Location: Ciudad de México
Posts: 20,269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Un par de comentarios:

ToggleShowCodes, más que activar los campos, alterna entre ver los códigos o ver los valores. Si en Word tenemos desmarcada la opción de ver los códigos, entonces ToggleShowCodes la marcará y lo que veremos son los códigos y no los valores.

El que se muestren los códigos o valores no afecta la impresión del documento. Siempre se imprimirán los valores actuales.

Por otra parte, veo que Manuel usa:

Code:
{MERGEFIELD nombres \* MERGEFORMAT}
pero debe ser

Code:
{DOCVARIABLE nombre\* MERGEFORMAT}
// Saludos
Reply With Quote
  #18  
Old 29/08/2006
Manuel's Avatar
Manuel Manuel is offline
Miembro
 
Join Date: May 2003
Location: San Pedro de la Paz/Chile
Posts: 324
Poder: 24
Manuel Va por buen camino
a pesar de todo los cambios incluso los que me propobe roman, igual sigo sin ver el resultado.
__________________
Manuel Muñoz L. Trabajando con delphi 7.0 , migrando sistema a Delphi XE8, matando BDE y pasando FIREDAC.
Reply With Quote
  #19  
Old 29/08/2006
roman's Avatar
roman roman is offline
Moderador
 
Join Date: May 2003
Location: Ciudad de México
Posts: 20,269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
¿Puedes preparar una pequeña plantilla de muestra y el código? De ser así, ponlo en un zip y adjúntalo al mensaje.

// Saludos
Reply With Quote
  #20  
Old 29/08/2006
Manuel's Avatar
Manuel Manuel is offline
Miembro
 
Join Date: May 2003
Location: San Pedro de la Paz/Chile
Posts: 324
Poder: 24
Manuel Va por buen camino
Gracias roman por tu interes, te mando plantilla
Attached Files
File Type: zip plantilla.zip (2.0 KB, 408 views)
__________________
Manuel Muñoz L. Trabajando con delphi 7.0 , migrando sistema a Delphi XE8, matando BDE y pasando FIREDAC.
Reply With Quote
Reply



Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Forum Jump

Similar Threads
Thread Thread Starter Forum Replies Last Post
Insertar filas en Tabla(word) Loviedo Servers 2 14/11/2007 00:12
Automatizacion de word (insertar tablas) alt126 C++ Builder 2 04/11/2005 10:44
Insertar objetos en Word ingel Varios 0 18/05/2005 22:42
Cómo insertar un salto de página a word desde delphi? nacho Servers 3 08/03/2005 21:02
Insertar Imagenes desde Delphi a un Documento Word ludan508 Servers 1 21/09/2004 01:07


All times are GMT +2. The time now is 02:16.


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