FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
|||
|
|||
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.... |
#2
|
||||
|
||||
Tiene que ser obligatoriamente en Word?
Podrías usar un simple qrExprMemo, dentro de un QuickReport Código:
Estimado {NombreCliente}: bla bla Puedes tener varios modelos predefinidos y cargar en tiempo de ejecución el que quieras. En fin, ya dirás si esto es viable. |
#3
|
||||
|
||||
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. |
#4
|
|||
|
|||
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. |
#5
|
|||
|
|||
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; 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. |
#6
|
|||
|
|||
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; |
#7
|
|||
|
|||
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. |
#8
|
|||
|
|||
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 .
|
#9
|
|||
|
|||
Yo también huyo de Word todo lo posible, pero a veces no queda más remedio que pasar por el aro.
Cita:
¿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. |
|
|
|