Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 23-09-2004
VRO VRO is offline
Miembro
 
Registrado: abr 2004
Posts: 230
Poder: 21
VRO Va por buen camino
Combinar Correspondencia con Word

Hola, estoy intentando combinar correspondencia en word y por lo que he visto en el foro se hace con el MailMerge, le estoy empezando a utilizar y no se muy bien como hacerlo.

¿Si alguien me podría guiar ?, estoy bastante confusa y no se por donde empezar.

Muchas Gracias.
Responder Con Cita
  #2  
Antiguo 23-09-2004
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.272
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
Cita:
Empezado por VRO
...estoy intentando combinar correspondencia en word y por lo que he visto en el foro se hace con el MailMerge, le estoy empezando a utilizar y no se muy bien como hacerlo.
Puedes echarle un vistazo a ésta función; He de decir que no la he probado, así que no se si funcionará (ya me dirás...); Como mínimo te puede servir de guía para saber cómo va...

Código Delphi [-]
procedure DoMSWordMerge(template_file, data_file: String; see_Word,
                        auto_print: Boolean);

{Arguments: template_file: path and name of existing MS Word template merge file
            data_file:     existing merge data file (must have a file extension 
                           recognized by MS Word)
            see_Word:      set to True if you want user to be able to see Word
            auto_print:    set to True if you want result document to print 
                           automatically and Word to exit

As written this code requires that the Word2000.PAS file be referenced in the 
Uses section. To compile with the Word97.PAS file simply change the OpenOld 
method call to "Open" and the PrintOutOld call to "PrintOut".  Also requires 
ComObj and ActiveX in the Uses section.    }

var
  MSWord: _Application;
  MSDoc: _Document;
  Unknown: IUnknown;
  OLEResult: HResult;
  OLEvar: OleVariant;
begin
  OLEResult := GetActiveObject(CLASS_WordApplication, nil, Unknown);
  if (OLEResult = MK_E_UNAVAILABLE) then
    MSWord := CoWordApplication.Create          //get MS Word running
  else begin
    OleCheck(OLEResult);                           //check for errors
    OleCheck(Unknown.QueryInterface(_Application, MSWord));
  end;
  MSWord.Visible := see_Word;                   //let user see Word running
  OLEvar := template_file;                      //merge template document
  MSDoc := MSWord.Documents.OpenOld(OLEvar, EmptyParam, EmptyParam, EmptyParam, 
           EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam,
           EmptyParam);
  MSDoc.MAILMERGE.OpenDataSource(data_file, EmptyParam, EmptyParam, EmptyParam, 
           EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, 
           EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam);

  OLEvar := False;
  with MSDoc.MAILMERGE do begin
    Destination := wdSendToNewDocument;
    Datasource.FirstRecord := wdDefaultFirstRecord;
    Datasource.LastRecord := Integer(wdDefaultLastRecord);
    Execute(OLEvar);                       //do merge into new document
  end;

  MSDoc.Close(EmptyParam, EmptyParam, EmptyParam);  //close template document
  OLEvar := 1;
  MSDoc := MSWord.Documents.item(OLEvar);  //attach to the merge result document

  {The next 4 lines cause Word to print the merged document and then exit. If 
   removed, Word will remain active without printing the merge document and
   control will return to the Delphi program. User will have to print the
   document by hand themselves.}
  if auto_print then begin
    OLEvar := False;                    //implies wait for printing to complete
    MSDoc.PrintOutOld(OLEvar, EmptyParam, EmptyParam, EmptyParam, EmptyParam,
                EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam,
                EmptyParam, EmptyParam, EmptyParam, EmptyParam);
    OLEvar := wdDoNotSaveChanges;           //don't save the merge document
    MSWord.Quit(OLEvar, EmptyParam, EmptyParam);
  end;

  MSDoc := nil;
  MSWord := nil;
end;

Otra opción que a veces utilizo yo cuando tengo que hacer automatizaciones con Word/excel, es crear un macro que realice un determinado trabajo y luego echarle un vistazo al código. El VBA es bastante compresible y te puede dar una idea de por dónde tirar....

Aparte puedes mirar éstos links:
http://support.microsoft.com/default...b;EN-US;220607
http://support.microsoft.com/default...b;EN-US;220911
http://<a href="http://www.kayodeok....bmailmerge</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
  #3  
Antiguo 23-09-2004
VRO VRO is offline
Miembro
 
Registrado: abr 2004
Posts: 230
Poder: 21
VRO Va por buen camino
Gracias por tu ayuda te prometo que estoy mirando el código que me diste.

Gracias
Responder Con Cita
  #4  
Antiguo 23-09-2004
VRO VRO is offline
Miembro
 
Registrado: abr 2004
Posts: 230
Poder: 21
VRO Va por buen camino
Hola Neftali probé tu método y me da un error nada más ejecutar, no me reconoce el procedimiento y tampoco reconoce el GetActiveObject,

¿será porque me falta instalar ó declarar al componente u objeto?
Responder Con Cita
  #5  
Antiguo 27-09-2004
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.272
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
Supongo que me dejé de decirte que debes añadir al uses las siguientes librerías:
ActiveX, ComObj, Word_TLB

Word_TLB, si no la tiees en el directorio "Imports" de delphi deberás importarla desde el menú: Project/Import Type Librery/ Microsoft Word Application
__________________
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
  #6  
Antiguo 28-09-2004
VRO VRO is offline
Miembro
 
Registrado: abr 2004
Posts: 230
Poder: 21
VRO Va por buen camino
Conseguido

Hola Neftalí ya conseguí hacer la combinación de correspondencia con una macro, de tu forma no la he vuelto a probar ya que tengo que consegui la libreria Word_tlb, pero prometo hacerlo.

Si alguien tiene alguna duda de como hacer la combinación de correspondencia le puedo dejar el código de la macro.

Una preguntilla una vez hecha la combinación de correspondencia y habiendo obtenido los resultados ¿alguien sabe como cerrarla ventana de word donde haces la correspondencia, no la de los resultados jo se si me explico, para que no la vea el usuario?

Muchas gracias, que sería de los que no tenemos experiencia sin el Club Delphi.
Responder Con Cita
  #7  
Antiguo 29-09-2004
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.272
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
Cita:
Empezado por VRO
...Una preguntilla una vez hecha la combinación de correspondencia y habiendo obtenido los resultados ¿alguien sabe como cerrarla ventana de word donde haces la correspondencia, no la de los resultados jo se si me explico, para que no la vea el usuario?
A ver si uno de éstos dos links te sirve:

Close Word
Close a document
__________________
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
  #8  
Antiguo 18-10-2004
walace_soy walace_soy is offline
Miembro
 
Registrado: may 2003
Ubicación: La Laguna (Tenerife)
Posts: 88
Poder: 21
walace_soy Va por buen camino
combinación de correspondencia

Si quereis hacer combinación de correspondencia os aconsejo que busqueis una unidad llamada MailMerge, que esta en internet y te hace todo y con unas pequeñas modificaciones podeis hacerla funcionar con cualquier word (desde office 97 hasta office 2003).

La función que se ha añadido es la ultima parte del proceso y creo que no esta del todo bien, pero no he podido darle un vistazo y probarla. Antes de eso hay que hacer procedimientos o funciones como quieras decirlo para incorporar los campos en el documento, porque sino tienes las etiquetas, el Execute... no te va a funcionar mucho.

Si no tienes suficiente información con lo que te han dicho, y no encuentras la unidad MailMerge, dimelo porque te la paso y viendola un poco aprenderas a utilizarla rapidamente. Pero que conste que utilizando el objeto TWordApplication puedes hacer lo mismo, solo hay que saber todos los comandos y procesos que hay que utilizar.

Ciao.
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 22:00:41.


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