Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 13-02-2005
Jorge Taveras Jorge Taveras is offline
Miembro
 
Registrado: abr 2004
Ubicación: Santo Domingo
Posts: 68
Poder: 21
Jorge Taveras Va por buen camino
Modelo de carta en word

Buenas tengan.... quiesiera tener varios modelos de cartas en word o algún otro medio sugerido con ustedes y poder generar una de ellas enviandole de una tabla(db) el nombre de la persona que va a recibir la carta, la fecha (fecha del dia) y quien la remite (db).

El modelo seria +/- asi.

Señor:
(nombre enviado por parametro desde una tabla) Fecha
(Enviada por parametro)

gracias por recibir esta carta
queda de uste, atentamente
(jorge taveras ...enviada por parametro).

la idea es que el usuario pueda manipular la carta y hacerle las correciones que quiera, pero que al final , desde un formulario de clientes (por ejemplo)
y apuntando a un cliente en particular , exista un botón que diga carta de bienvenida y le envie el nombre, la fecha y el remitente a un formato pre-hecho y lo imprima.... gracias anticipadas.... compañeros foristas....
Responder Con Cita
  #2  
Antiguo 13-02-2005
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Tiene que ser obligatoriamente en Word?

Podrías usar un simple qrExprMemo, dentro de un QuickReport

Código:
 Estimado {NombreCliente}:

 bla bla
el QuickReport lo enlazas a una consulta segun todos los datos que vayas a necesitar en la carta, como ves, el nombre del campo que necesitas lo escribes entre llaves, y se sustituye por el dato de tu consulta.

Puedes tener varios modelos predefinidos y cargar en tiempo de ejecución el que quieras.

En fin, ya dirás si esto es viable.
Responder Con Cita
  #3  
Antiguo 14-02-2005
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.275
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Yo lo he hecho alguna vez utilizando la propia MailMerge (Combinar correspondencia) del Word; Utilizanba un fichero de texto para los datos y luego desde el programa Delphi llamaba a la función MailMerge. Otra opción más sencilla (aque día no lo sabía... ) es utilizar BookMarks(Marcadores) en el fichero de Word y luego sustituirlos; Ésta es más manual, pero da menos problemas...
Existe un componente en el propio ClubDelphi que lo hace. Descargate TWordParaTorpes 1.0 hace lo que quieres. Échale un vistazo a la Demo que hay en el directorio demo_db (...te vas a llevar una gran alegría).
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #4  
Antiguo 16-02-2005
VRO VRO is offline
Miembro
 
Registrado: abr 2004
Posts: 230
Poder: 21
VRO Va por buen camino
no se si te servirá

Bien yo he hecho algo similar, he creado un recibo de agua, para ello tengo una tabla creada en un documento de word (tabla.doc) que la creo desde delphi con un componente TWordDocument, que contiene los datos que quiero rellenar el el documento recibo. Después tengo otro documento en word que una plantilla de recibo sin los datos , claro, acontinuacion creo en word una macro de una combinacion de correspondencia (Mail Merge), esta macro tiene su propio codigo en Visual Basic que podemos transcribir a codigo delphi (en este caso el codigo es muy similar y facil de transcribir) y creo en Delphi una funcion con el codigo trnascrito.

De esta forma automáticamente te pasa los datos al recibo, en tu caso a la carta.

Espero que te sirva.
Responder Con Cita
  #5  
Antiguo 16-02-2005
rafita rafita is offline
Miembro
 
Registrado: ago 2003
Ubicación: Cuenca- España.
Posts: 309
Poder: 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
  #6  
Antiguo 18-02-2005
Jorge Taveras Jorge Taveras is offline
Miembro
 
Registrado: abr 2004
Ubicación: Santo Domingo
Posts: 68
Poder: 21
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
  #7  
Antiguo 18-02-2005
rafita rafita is offline
Miembro
 
Registrado: ago 2003
Ubicación: Cuenca- España.
Posts: 309
Poder: 21
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
  #8  
Antiguo 18-02-2005
Jorge Taveras Jorge Taveras is offline
Miembro
 
Registrado: abr 2004
Ubicación: Santo Domingo
Posts: 68
Poder: 21
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
  #9  
Antiguo 21-02-2005
rafita rafita is offline
Miembro
 
Registrado: ago 2003
Ubicación: Cuenca- España.
Posts: 309
Poder: 21
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
  #10  
Antiguo 24-11-2007
Avatar de Carmelo Cash
Carmelo Cash Carmelo Cash is offline
Miembro
 
Registrado: jul 2003
Ubicación: Buenos Aires
Posts: 261
Poder: 21
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



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 01:40:02.


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
Copyright 1996-2007 Club Delphi