![]() |
![]() |
| Paypal | FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
|||||||
| Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Buscar | Temas de Hoy | Marcar Foros Como Leídos |
![]() |
|
|
Herramientas | Buscar en Tema | Desplegado |
|
|
|
#1
|
|||
|
|||
|
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. |
|
#2
|
|||
|
|||
|
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; |
|
#3
|
|||
|
|||
|
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. |
|
#4
|
|||
|
|||
|
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 .
|
|
#5
|
|||
|
|||
|
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. |
|
#6
|
||||
|
||||
|
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. ![]() |
![]() |
| Herramientas | Buscar en Tema |
| Desplegado | |
|
|
|