Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Servers (https://www.clubdelphi.com/foros/forumdisplay.php?f=9)
-   -   Insertar un campo MergeField en word (https://www.clubdelphi.com/foros/showthread.php?t=54616)

lcarlos 25-03-2008 15:38:19

Insertar un campo MergeField en word
 
Buenas, abro este hilo por que ya he probado todas las posibles opciones que he encontrado en la pagina y en cualquier sitio relacionado, les cuento mi situación por si pueden ayudarme:

Tengo un ActiveX que carga un documento word que recibo por parámetro, además de recibir otro parametro con unos posibles campos a añadir.

El usuario de la aplicación debe poder modificar estos word añadiendo campos que el desconoce inicialmente pero que los va a seleccionar de un listbox y a añadir.

El word se incrusta en un olecontainer de la siguiente forma
Self.OleContainer.CreateObjectFromFile(Fuente,False); Siendo fuente el word.

Como no se hacer refencia al word lo que hago es en el botón que añade el campo hacer lo siguiente:
WordDocument1.ConnectTo(
IDispatch(OleContainer.OleObject) as _Document);

De esta manera ya puedo referenciarlo con WordDocument1

ahora viene el problema, si hago lo siguiente:
WordDocument1.MailMerge.Fields.Add(r, ElCampo); --> Me cierra el word y abre otro añadiendo elcampo, como un campo mergefield, pero lo que yo quiero es añadirlo en el word original donde ademas se puede escribir.

Si hago WordDocument1.Paragraphs.Last.Range.Text := '{ MERGEFIELD TratamientoCortesía\f " " }'; Si me añade el texto que pongo pero no se trata de un campo y no me sirve, además no se como añadirlo en la posición donde se encuentra el cursor.

Les agradeceré una ayudita, gracias.

lcarlos 26-03-2008 13:36:56

Solución
 
Buenas, ya tengo la solución :), la pongo por si a alguien le sirve.

Salu2.
Código Delphi [-]
 
var
  Word: TWordApplication;
  Doc: TWordDocument;
 
begin
  Word := TWordApplication.Create(Application);
  word.Connect;
  Doc := TWordDocument.Create(Application);
  Doc.ConnectTo(
    IDispatch(OleContainer.OleObject) as _Document);
  // Valor de los parámetros
  r:= Doc.Range;
  tipo:= wdfieldmergefield;
  texto := ElCampo;
  formato:= true;
  // Añado el campo.
  Word.Selection.Fields.Add(Word.Selection.Range, tipo, texto, formato);
  // Oculto los códigos del campo
  Word.ActiveWindow.View.ShowFieldCodes := false;
 
end;


La franja horaria es GMT +2. Ahora son las 07:57:31.

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