Ver Mensaje Individual
  #5  
Antiguo 16-02-2005
rafita rafita is offline
Miembro
 
Registrado: ago 2003
Ubicación: Cuenca- España.
Posts: 309
Reputación: 21
rafita Va por buen camino
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
__________________
Rafita.

Última edición por rafita fecha: 16-02-2005 a las 12:13:13.
Responder Con Cita