Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Coloboración Paypal con ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 16-02-2005
rafita rafita is offline
Miembro
 
Registrado: ago 2003
Ubicación: Cuenca- España.
Posts: 309
Poder: 24
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
  #2  
Antiguo 18-02-2005
Jorge Taveras Jorge Taveras is offline
Miembro
 
Registrado: abr 2004
Ubicación: Santo Domingo
Posts: 68
Poder: 23
Jorge Taveras Va por buen camino
Estimados amigos, disculpen la tardanza es que he estado trabajando con un par de cosas que jamas habia usado. La aportación de todos fué muy buena... Tomé el modelo que rafita puso el codigo, citando a neftali.. ( por cierto se te fueron 3 parámetros de más). Con este ejemplo no tuve la necesidad de bajara el twordparatorpes, sí utilicé twordapplication. Lo que no he logrado es reemplazar los marcadores. Utilizo corchetes con un espacio en blanco y luego el nombre del marcador... realmente no sé que estoy haciendo mal ... les ruego me den otra ayudita... aqui esta mi carta

señor o señora:

{ MN_Nombre }

Expedinte { MN_Expediente }



placeme saludartle

adios

y este es el codigo que lo enlaza
Marcador:='MN_Nombre';
Contenido:=trimright(vfnomPaciente);
SustituirMarcador;
Marcador:='MN_Expediente';
Contenido:=trimright(vfexpediente);
SustituirMarcador;

Responder Con Cita
  #3  
Antiguo 18-02-2005
rafita rafita is offline
Miembro
 
Registrado: ago 2003
Ubicación: Cuenca- España.
Posts: 309
Poder: 24
rafita Va por buen camino
Hola Jorge, vamos por partes:

* Los parámetros que sobran dependen de la versión de Wod, en mi caso utilizo WordXP y son correctos. Supongo que tu estarás utilizando Word 2000.
Esto me recuerda que si vas a distribuir tu aplicación, tus usuarios debe tener la misma versión de Office que tu has cargado con Delphi.

* En el tema de los marcadores creo que estas intentando utilizar palabras escritas dentro de tu documento.
Los marcadores (o bookmarks) son códigos especiales que utiliza Word.
Se crean mediante Insertar --> Marcador. Aparece una ventana donde pones el nombre (único en todo el documento), también verás todos los marcadores definidos, pudiendo verlos por nombre o por posición.
En las opciones de Word puedes seleccionar para que estén visibles:
Herramientas --> Opciones --> Ver --> Mostrar --> Marcador,
pero no verás el nombre sino un simbolo como una I (i latina mayúscula).
Señor/Señora:
I
No te hacen falta corchetes ni nada.

* Me parece que lo que te ha llevado a confusión es mi forma de nombrarlo: comenzando por la letra M (M_Nombre1), es solo una manía mía.

Saludos y suerte.
__________________
Rafita.
Responder Con Cita
  #4  
Antiguo 18-02-2005
Jorge Taveras Jorge Taveras is offline
Miembro
 
Registrado: abr 2004
Ubicación: Santo Domingo
Posts: 68
Poder: 23
Jorge Taveras Va por buen camino
Rafita, gracias por todo. Ya me funciona... La verdad es que se de WORD lo menos posible. Desconocía lo de los marcadores... Por ultimo me gustaría saber que componentes usas para wordxp.. Tengo delphi 6 y utilice el objeto twordapplication. con afecto, jorge .
Responder Con Cita
  #5  
Antiguo 21-02-2005
rafita rafita is offline
Miembro
 
Registrado: ago 2003
Ubicación: Cuenca- España.
Posts: 309
Poder: 24
rafita Va por buen camino
Yo también huyo de Word todo lo posible, pero a veces no queda más remedio que pasar por el aro.

Cita:
Empezado por Jorge Taveras
Rafita, gracias por todo. Ya me funciona... La verdad es que se de WORD lo menos posible. Desconocía lo de los marcadores... Por ultimo me gustaría saber que componentes usas para wordxp.. Tengo delphi 6 y utilice el objeto twordapplication. con afecto, jorge .
El único componente que utilizo el TWordApplication, del resto no tengo ni idea de para qué sirven.
¿Cómo lo he cargado para XP? En el momento de la instalación de Delphi te pregunta que componentes de Office deseas cargar y tú eliges la versión, puesto que sólo te permite una (supongo que es por algún tema de licencias).

Alguien me dijo que cambiando en las USES del programa el nombre de la unidad: WordXP por Word97 o Word2000 (y adaptando el número de parámetros) haría que mi aplicación funcionase para esas versiones, pero no he hecho pruebas.

Saludos.
__________________
Rafita.
Responder Con Cita
  #6  
Antiguo 24-11-2007
Avatar de Carmelo Cash
Carmelo Cash Carmelo Cash is offline
Miembro
 
Registrado: jul 2003
Ubicación: Buenos Aires
Posts: 269
Poder: 24
Carmelo Cash Va por buen camino
Siguiendo la sugerencia de LEPE.

Hola. Como verán este tema se trató hace mucho, pero yo recién me topo con este problema.
Después de ver la opciones me decidí por implementar la sugerencia de LEPE.

Entoces pongo en un form un "RichEdit" donde escribo

Estimado señor {Cliente}
Ud debe....bla bla bla

Luego en el QuickReport coloco un QRExprMemo.

Luego paso las líneas
QRExprMemo.lines:=RichEdit.lines

y Listo. Sale perfecto. ... pero...

Pero usé un RichEdit para poder almacenar los documentos dandoles distintos tipos de fuentes, por ejemplo que el nombre del cliente salga en negrita.

El problema es que al pasar al QRExprMemo del quickreport el formato del texto se pierde. entonces...

usé en quickreport un QRRichtext

e hice QRRichtext.ParentRichEdit:=QRRichtext.

y salierón todos los tipos de fonts , con los colores.. una belleza... pero...

Pero en vez de salir el nombre del cliente sale (literamente) {Cliente}.

Resumiendo...

Hay alguna forma de pasarle al QRExprMemo del quickreport el formato del texto que tiene el RichEdit?
O...
Se podrá lograr que el QRRichtext tome los datos entre llaves? {Cliente} y que aparezca Pepe (en negrita)

Bueno. Gracias por la paciencia.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 16:07:27.


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