Hola Jorge, como te dice Neftali tienes varias formas: componente TWordParaTorpes, MailMerge, sustituir marcadores,....
Te envío un trozo de código que he utilizado recientemente con el método de sustituir marcadores:
* Necesitas un documento-plantilla con los marcadores a sustituir
* Lo abres desde Delphi como "sólo lectura"
* Sustituyes los marcadores por campos de una consulta, campos de tu formulario, variables,... lo que necesites
* La sustitución no elimina el marcador, por tanto si pulsas varias veces en el botón que genera el informe, los datos aparecerán duplicados en el documento de word.
* Utilizo el procedimiento SustituirMarcador para no repetir todas las veces ese trozo de código
* Si no existe un nombre de marcador no pasa nada porque comprueba previamente su existencia. De esta forma reutilizo el mismo procedimiento para un montón de documentos aunque no todos tengan los mismos marcadores.
Código:
procedure TFEntradaVehiculos.GenerarDocumentoWord;
var Fichero, Marcador, Contenido, SoloLectura, SalvarCambios, FormatoOriginal, Ruta : OleVariant;
MiDocumento : _document;
procedure SustituirMarcador;
begin
if MiDocumento.Bookmarks.Exists(Marcador) then MiDocumento.Bookmarks.Item(Marcador).Range.InsertBefore(Contenido);
end;
begin
// Conexión con Word
try
MiWord.Connect;
except
ShowMessage('WordXP no está instalado en este equipo');
Abort;
end;
// selección del documento base
if Combo1.Text='Comunicación Inicio Procedimiento' then
Fichero:='y:\Inspeccion\Comunicación Inicio Marca.doc'
else
if Combo1.Text='Diligencia' then
Fichero:='y:\Inspeccion\Diligencia Citación Marca.doc'
else
if Combo1.Text='Acta de Conformidad' then
Fichero:='y:\Inspeccion\ACTA ConfOTMarca.doc';
// abrir el documento seleccionado con los parámetros necesarios
SoloLectura:=True;
MiDocumento:=MiWord.Documents.Open(Fichero, EmptyParam, SoloLectura,
EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam,
EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam);
// comienzan las sustituciones de los marcadores.
Marcador:='MN_Expediente1';
Contenido:=Edit1.Text;
SustituirMarcador;
Marcador:='MN_Expediente2';
SustituirMarcador;
Marcador:='MSujeto_pasivo1';
Contenido:=Edit6.Text;
SustituirMarcador;
Marcador:='MCIFNIF1';
Contenido:=Edit7.Text;
SustituirMarcador;
Marcador:='MNotificacion_Inicio1';
Contenido:=FechaLiteral(Edit35.Text);
SustituirMarcador;
Marcador:='MFecha_Diligencia1';
Contenido:=FechaLiteral(Edit36.Text);
SustituirMarcador;
// maximizamos la ventana de Word y desconectamos
MiWord.WindowState:=wdWindowStateMaximize;
MiWord.ActiveWindow.WindowState:=wdWindowStateMaximize;
MiWord.PrintPreview;
MiWord.Visible:=True;
SalvarCambios:=wdDoNotSaveChanges;
FormatoOriginal:=unAssigned;
Ruta:=unAssigned;
try
MiWord.Disconnect;
except
on e:Exception do
begin
ShowMessage('Se ha producido el error '+e.Message);
MiWord.Disconnect;
end;
end;
He recortado el código dejando solamente lo básico para que funcione.
En el foro Server encontre una dirección proporcionada por Neftalí donde explica mediante ejemplo la comunicación Delphi-Word.
http://www.djpate.freeserve.co.uk/Automation.htm
Un saludo