Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Servers (https://www.clubdelphi.com/foros/forumdisplay.php?f=9)
-   -   Insertar datos a word (https://www.clubdelphi.com/foros/showthread.php?t=30762)

roman 29-08-2006 17:34:55

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:

Código Delphi [-]
Word.ActiveWindow.View.ShowFieldCodes := false;

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

Manuel 29-08-2006 18:48:05

gracias roman,:) ahora todo bien

arthurmax 07-03-2007 23:59:23

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:

fmatias 07-08-2007 13:35:17

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.

Código Delphi [-]
  Word: Variant;
  Documento: Variant;

begin
 (* Creamos un objeto Word *)
  Word := CreateOleObject('Word.Application');

  (* Añadimos un documento basado en la plantilla *)
  if FileExists(dbDOC.field.value) then   // si existe el fichero lo abrimos
     documento:=Word.Documents.Open(dbDOC.field.value)
  else  // abrimos la plantilla
    Word.Documents.Add(ExtractFilePath(Application.ExeName)+'Docs\Plantillas\caso1.dot');

    Documento := Word.Documents.Item(1);
    (* Asignas valores a los campos *)
    Documento.Variables.Add('Nombre',nombre );
    Documento.Variables.Add('Direc', direccion);
    Documento.Variables.Add('Local', localidad);
    Documento.Variables.Add('Prov', provincia);

    
    Word.ActiveDocument.SaveAs(ExtractFilePath(Application.ExeName)+'Docs\1Notificacion\'+dbidReg.field.  value);
    // actualizamos la tabla con el nuevo nombre de fichero 
    adocartas1.Edit ;
    dbDOC.field.value:=ExtractFilePath(Application.ExeName)+'Docs\1Notificacion\'+dbidReg.field.value+'.  doc';
    adocartas1.Post ;

   Documento.Fields.Update;
   Word.ActiveWindow.View.ShowFieldCodes := false;
   Word.Visible := true;

end;

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.

ingel 14-03-2008 15:02:48

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

luchin001 17-09-2008 20:09:29

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

emeritos 14-11-2008 11:21:33

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.

romacruzz 28-11-2008 00:15:20

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:

Empezado por fmatias (Mensaje 221093)
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.


Código Delphi [-]
Word: Variant;
Documento: Variant;

begin
(* Creamos un objeto Word *)
Word := CreateOleObject('Word.Application');

(* Añadimos un documento basado en la plantilla *)
if FileExists(dbDOC.field.value) then // si existe el fichero lo abrimos
documento:=Word.Documents.Open(dbDOC.field.value)
else // abrimos la plantilla
Word.Documents.Add(ExtractFilePath(Application.ExeName)+'Docs\Plantillas\caso1.dot');

Documento := Word.Documents.Item(1);
(* Asignas valores a los campos *)
Documento.Variables.Add('Nombre',nombre );
Documento.Variables.Add('Direc', direccion);
Documento.Variables.Add('Local', localidad);
Documento.Variables.Add('Prov', provincia);


Word.ActiveDocument.SaveAs(ExtractFilePath(Application.ExeName)+'Docs\1Notificacion\'+dbidReg.field. value);
// actualizamos la tabla con el nuevo nombre de fichero
adocartas1.Edit ;
dbDOC.field.value:=ExtractFilePath(Application.ExeName)+'Docs\1Notificacion\'+dbidReg.field.value+'. doc';
adocartas1.Post ;

Documento.Fields.Update;
Word.ActiveWindow.View.ShowFieldCodes := false;
Word.Visible := true;

end;





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.


inirio 08-01-2009 18:33:30

Alejandro inirio
 
no complicaos
escribeme a mi email i te sire como hacer reporte en word de manera facil
[email protected]

roman 08-01-2009 18:43:40

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

ASAPLTDA 11-01-2009 18:04:35

Mostrar Valor Campos En Vez De Nombre De Campos De La Plantilla
 
Cita:

Empezado por Manuel (Mensaje 154143)
a pesar de todo los cambios incluso los que me propobe roman, igual sigo sin ver el resultado.

Hola Manuel, no es tarde la respuesta es solo que segui este tema para enviar datos a word. La solucion Manual al problema es que debes en el .Dot Tener :
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

ASAPLTDA 12-01-2009 18:11:13

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

roman 12-01-2009 20:01:11

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

NashvilleX 27-01-2009 22:07:48

Cita:

Empezado por roman (Mensaje 133005)
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í:


Señor
{ DOCVARIABLE nombre\* MERGEFORMAT }
{ DOCVARIABLE direccion\* MERGEFORMAT }

Estimado, le comunicamos que con fecha { DOCVARIABLE fecha\* MERGEFORMAT }, usted tiene una deuda de { DOCVARIABLE deuda\* MERGEFORMAT }, le rogamos regularizar su situacion.

Atentamen el cobrador

Conviene que actives la visualización de campos en el menú Herramientas|Opciones|Ver.

En Delphi, puedes llenar la plantilla así:

Código Delphi [-]

uses ComObj;

...

var
Word: Variant;
Documento: Variant;

begin
(* Creas un objeto Word *)
Word := CreateOleObject('Word.Application');

(* Añades un documento basado en la plantilla *)
Word.Documents.Add('carta.dot');
Documento := Word.Documents.Item(1);

(* Asignas valores a los campos *)
Documento.Variables.Add('nombre', 'pepe pérez');
Documento.Variables.Add('direccion', 'domicilio conocido');
Documento.Variables.Add('fecha', '1976-02-29');
Documento.Variables.Add('deuda', '$1.00 m.n');
end;


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


Agradezco mucho la ayuda. Menos mal que encontré este hilo para enterarme del método que enseñas.

Gracias:p

siriana 12-03-2009 19:23:08

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.ç

alekhine 18-04-2010 00:59:34

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

axel07_89 30-11-2010 01:34:18

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

Casimiro Noteví 30-11-2010 01:48:41

Hola axel07_89, bienvenido a clubdelphi, por favor, lee nuestra guía de estilo para que podamos entendernos mejor, muchas gracias.

emeritos 30-04-2015 13:06:50

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

fjcg02 30-04-2015 14:28:10

Prueba esto

Código Delphi [-]
Archivo = 'c:\imagen.png'
rango = wordtable.Cell( i,j).Range;
word.selection.inlinesshapes.addpicture(archivo, emptyparam, emptyparam, rango


Saludos


La franja horaria es GMT +2. Ahora son las 11:28:38.

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