PDA

Ver la Versión Completa : Insertar un campo MergeField en word


lcarlos
25-03-2008, 15:38:19
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
Buenas, ya tengo la solución :), la pongo por si a alguien le sirve.

Salu2.

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;