Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Servers (https://www.clubdelphi.com/foros/forumdisplay.php?f=9)
-   -   Insertar datos a word (https://www.clubdelphi.com/foros/showthread.php?t=30762)

Manuel 18-04-2006 00:40:50

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

roman 18-04-2006 07:00:05

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

CamiloU 19-04-2006 06:24:07

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.

egostar 19-04-2006 19:34:11

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

Saludos.

roman 19-04-2006 20:08:05

Cita:

Empezado por 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 :o

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

Manuel 02-05-2006 00:22:17

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:

Cita:

Carta

El señor
{ DOCVARIABLE nombres \* MERGEFORMAT}

Cita:

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.

roman 02-05-2006 00:48:53

¡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

Manuel 09-06-2006 20:47:31

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.

toorbye 08-08-2006 10:37:13

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

jjkballero 25-08-2006 14:33:05

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.:eek:

jjkballero 25-08-2006 14:40:52

Solucionado en primera orden
 
Probando he visto que los campos de Word hay que activarlos y listo.

Manuel 26-08-2006 15:46:07

Como, activarlos?

jjkballero 28-08-2006 09:01:23

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,

jjkballero 28-08-2006 09:10:04

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.:)

Manuel 28-08-2006 15:34:45

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

jjkballero 29-08-2006 08:19:24

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.

roman 29-08-2006 09:25:54

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:

Código:

{MERGEFIELD nombres \* MERGEFORMAT}
pero debe ser

Código:

{DOCVARIABLE nombre\* MERGEFORMAT}
// Saludos

Manuel 29-08-2006 15:34:12

a pesar de todo los cambios incluso los que me propobe roman, igual sigo sin ver el resultado.

roman 29-08-2006 15:38:21

¿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

Manuel 29-08-2006 15:42:57

1 Archivos Adjunto(s)
Gracias roman por tu interes, te mando plantilla


La franja horaria es GMT +2. Ahora son las 15:23:47.

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