Insertar datos a word
Holas amigos del foro, hace tiempo que tengo la idea siguiente:
terner una plantilla en word mas o menos asi: Señor {nombre} {direccion} Estimado, le comunicamos que con fecha {fecha}, usted tiene una deuda de {deuda}, le rogamos regularizar su situacion. Atentamen el cobrador Ahora, los datos en {}, deberiaqn ser sacados de una base de datos en interbase y crear una aplicacion que fuera insertando esos datos en word, es posible?, me gustaria mucho si me dieron algunas ideas, gracias |
Es muy sencillo. Creas la plantilla .dot en Word usando campos de tipo DocVariable (menú Insertar|Campo). A cada campo le asignas un nombre al momento de insertarlo. El documento .dot te quedaría más o menos así:
Conviene que actives la visualización de campos en el menú Herramientas|Opciones|Ver. En Delphi, puedes llenar la plantilla así:
Claro está que los valores que asignes a los campos los puedes tomar de una consulta a la base de datos o de cualquier otra fuente. // Saludos |
Me intereso el huilo y segui las instrucciones de Roman. Pero tengo una duda. Como puedo ver los resultados? Ejecute la aplicación pero no vi resultados en la plantilla. Es necesario realizar algún paso adicional?
Muchas Gracias. |
|
Cita:
Después de los pasos anteriores necesitas visualizar Word con
Con esto debe aparecerte ya la ventana de Word con el nuevo documento. // Saludos |
gracias roman
segui los pasos que dijiste incluso el Word.Visible := true; me muestra la carta pero no los datos: justo como lo dijiste, use casi el mismo ejemplo, la plantilla asi:
Cita:
Cita:
|
¡Vaya! ¡Qué omisión! Acabo de revisar una vez más el código donde tengo implementado algo similar y veo que, en efecto, olvidaba algo que parece ser imprescindible.
Espero que ahora sí. // Saludos |
hola roman, gracias por tu ayuda pero de todas meneras me muestra el doc, pero sigue apereciendo con el nombre de campo en vez del valor.
|
Hola, a mi el ejemplo me funciona correctamente, pero tengo una duda. Me gustaria que automaticamente el documento se guardara con un nombre que yo especificara. Busque en google pero no encontre nada, lo unico el parametro Save, Word.Documents.Save; que hace que se habra un cuadro de dialogo pidiendo el nombre del archivo. Pero a mi lo que me gustaria es que ya puediera especificar de modo transparente al usuario el nombre del archivo.
un saludo y gracias |
No actualiza los datos
He probado el código que proponéis, pues es justamente lo que llevaba buscando un tiempo, el problema es que no me actualiza la sentencia de word y el documento lo abre pero sin los datos que le envío desde Delphi, que mas nos podría faltar en este código. Gracias de antemano.:eek:
|
Solucionado en primera orden
Probando he visto que los campos de Word hay que activarlos y listo.
|
Como, activarlos?
|
Activar los campos
Estoy buscando la forma de activar directamente los campos desde Delphi, pues ocurre lo siguiente.
Desde el propio Word hay que ir campo por campo uno a uno, entonces necesito desde delphi abrir el documento de word activando los campos, me imagino que estos campos deben tener una propiedad para activarlos, será de esta forma o bien creando una macro en word y ejecutarla desde Delphi, voy a probar a ver si lo consigo, si alguien lo consigue antes que yo, que lo diga, gracias, |
Lo encontré
Para activar los variables en word basta con lanzar la siguiente instrucción:
documento.Fields.ToggleShowCodes y con esto conseguimos activar los campos en word y por tanto que se muestren los datos.:) |
sigo con problemas, este mi código delphi
esta es mi plantilla: Carta El señor {MERGEFIELD nombres \* MERGEFORMAT} ewl resulto me sale exactamente lo mismo que la plantilla |
Yo lo tengo casi igual
Mira yo tengo el código igual solo que el update de las variables lo hago antes que el ToggleShowCodes y me funciona.
No se si las variables de word las insertas a mano o desde la opción Insertar --> Campo y seleccionas la opción DocVariable A ver si está ahí la cuestión. |
Un par de comentarios:
ToggleShowCodes, más que activar los campos, alterna entre ver los códigos o ver los valores. Si en Word tenemos desmarcada la opción de ver los códigos, entonces ToggleShowCodes la marcará y lo que veremos son los códigos y no los valores. El que se muestren los códigos o valores no afecta la impresión del documento. Siempre se imprimirán los valores actuales. Por otra parte, veo que Manuel usa: Código:
{MERGEFIELD nombres \* MERGEFORMAT} Código:
{DOCVARIABLE nombre\* MERGEFORMAT} |
a pesar de todo los cambios incluso los que me propobe roman, igual sigo sin ver el resultado.
|
¿Puedes preparar una pequeña plantilla de muestra y el código? De ser así, ponlo en un zip y adjúntalo al mensaje.
// Saludos |
1 Archivos Adjunto(s)
Gracias roman por tu interes, te mando plantilla
|
1 Archivos Adjunto(s)
Pues me ha funcionado tal cual. De cualquier manera te he preparado un ejemplo para que lo pruebes. Tiene algunas pequeñas diferencias como el uso de OleVariant en lugar de Variant, pero no creo que esto afecte realmente.
También agregué el método:
que debe forzar a que se vean los valores y no los campos. Si te marca un error, simplemente quita esa línea. Va incluido el ejecutable, pero sólo funcionará si tienes instalado el Delphi 7. // Saludos |
gracias roman,:) ahora todo bien
|
La plantilla no cierra
El ejercicio me funciona perfectamente, excepto por el hecho que la plantilla ".dot", queda abierta aún cerrando la aplicación en la que se genera el documento de Word, agradezco que me puedan decir cómo cierro la plantilla.
Gracias:confused: |
Qusiera aprovechar este hilo para intentar resolver mi problema.
Tengo una variante del código descrito anteriormente que comprueba si existe ya un documento de word. Si existe el documento abre el existente y si no existe abre el documento plantilla.
Cuando abre el documento plantilla, va perfectamente, pero al abrir un documento existente me aparece un mensaje indicando que ya existe ese nombre de variable refirendose al código donde se añaden las variables. ¿Es posible limpiar las variables creadas en el documento existente? Quedo pendiente de vuestras respuestas. |
he encontrado este hilo y es 'casi' lo que necesito..
pero mi pregunta es la siguiente ..puedo generar el archivo 'modelo' el .dot DESDE delphi .. para que asi sean los usuario los que creen los modelos y ponerles a disposicion una serie de VARIABLES que serian los datos que irian entre {} ... que saldrian de un SQL
Gracias a todos Sds |
Me he cabeceado 2 dias :mad: tratando de encontrar la forma de hacerlo, luego me acorde del clubdelphi :o, lei este hilo y solucionado !
gracias, muchas gracias ...:p |
Hola compañeros de Delphi. Siguiendo este ejemplo del word al final me ha funcionado bien pero al cerrar la aplicacion me sale este error:
En tienpo de ejecucion --> "Runtime error 216 at 0043A1A" En tienpo de diseño --> "Access violation at address 774FCAFC en module ole32.dll". Como lo puedo solucionar. PD. Este error que me sale al finalizar el programa no me impide que lo cierre y que vuelva a ejecutarlo otra vez, pero no da una buena impresión. |
sobre este ejemplo tengo una duda
Tenemos varias [FONT='Verdana','sans-serif']DOCVARIABLE nombre\* MERGEFORMAT } en una plantilla o machote , en delphi queremos programar las busqueda para que encuentre dentro de la platilla estas variables [FONT='Verdana','sans-serif']DOCVARIABLE nombre\* MERGEFORMAT } sustituirlas por informacion que tenemos en una base de datos....Como hacemos esto amigos..[/font][/font]
[FONT='Verdana','sans-serif'][/font] [FONT='Verdana','sans-serif'][FONT='Verdana','sans-serif']No hay mucha informacion de como tratar archivos de word en delphi...[/font][/font] [FONT='Verdana','sans-serif'] [/font] Cita:
|
Alejandro inirio
no complicaos
escribeme a mi email i te sire como hacer reporte en word de manera facil inirioalejandro@gmail.com |
Alejandro,
Estos foros son para compartir conocimientos entre todos. Si tienes algo que aportar puedes escribir aquí mismo un mensaje o poner tu aporte en el FTP del club. Si manejamos las cosas por correos privados, se pierde el sentido de los foros. // Saludos |
Mostrar Valor Campos En Vez De Nombre De Campos De La Plantilla
Cita:
menu tools, menu options, tabsheet view Field Codes sin marcar (no chulo), lo que no se es como decirlo desde delphi . Una vez lo elimna la marca salva el archivo .dot y genera nuevamente la impresion y esto hace que funcione Gracias a los usarios de es tema por sus comentarios |
Usando Tablas??
Hola Roman gracias por la informacion de word, podrias ayudarnos ampliando este mensaje para procesar una factura en word. la idea basica es
header igual para todas las paginas detalle detalle del producto totales totales del producto LOGO XXXXXXXXXXXXXXX CIA NOMBRE CLIENTE NOMBRE CLIENTE FACTURA FECHA XXXXXX XXXXXXXXXXXXXXXXX XXXXXXXXX XXXXXX PRODUCTO DESCRIPCION CANTIDAD UNITARIO TOTAL IMPUESTO XXXXXXX XXXXXXXXXX 1 100.25 100.25 16% XXXXXXX XXXXXXXXXX 1 100.25 100.25 16% XXXXXXX XXXXXXXXXX 1 100.25 100.25 16% XXXXXXX XXXXXXXXXX 1 100.25 100.25 16% ... TOTAL IMPUESTA 1250.00 TOTAL fACTURA 100.55 usando el ejemplo no pude colocar valores en el header o en el footer, y tampoco sabria como hacer las lineas del detalle Prodrias ayudarno con algunas lineas de codigo y/o ejmeplo Gracias |
En el header y el footer de Word puedes insertar también variables de documento como las del ejemplo.
Para el caso de una tabla ya es distinto. Podrías combinar esto con el ejemplo de aquí. // Saludos |
Cita:
Agradezco mucho la ayuda. Menos mal que encontré este hilo para enterarme del método que enseñas. Gracias:p |
insertar datos de builder a word
hola yo estoy trabajndo en c++ builder 6.0 y me maraca unos errores por que algunas propiedades no perteneces a ese tipo de builder, si me pudieran ayudar a sustitiur le codigo para c++ builder 6.0 estaria muy agradecida.ç
|
Funciona 100%
Gracias hermano, esto ya lo estaba buscando hace algun tiempo y esta es la mejor respuesta, a mi me funcionó a la peerfección.
Ahora la inquietud del otro pana es buena, como guardar el documento de una forma transparente para el usuario (automático).... Gracias |
DocVariable desde Memo en delphi 7
Ayuda!! Tengo un docVariable en una plantilla, extraigo los datos desde un memo en delphi 7, el detalle esta en que muestra un símbolo en lugar de dar un salto de linea. :D
|
Hola axel07_89, bienvenido a clubdelphi, por favor, lee nuestra guía de estilo para que podamos entendernos mejor, muchas gracias.
|
Y para insertar una imagen, la cual o bien la tengo en una variable longblob o su direccion algo como "c:\archivo\dibujo.jpg"
Gracias |
Prueba esto
Saludos |
La franja horaria es GMT +2. Ahora son las 07:13:27. |
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