Cita:
Empezado por Siem
por mas que lo he intentado, no me deja hacer esto ultimo.
|
En estos casos, nunca está de más indicar cuáles son los intentos que has hecho y cuáles los problemas que has tenido.
Hasta donde yo veo, la asignación de valores a campos DocVariable como los usados en el hilo que refieres, puede hacerse tanto si se trata de un documento creado a partir de una plantilla como si se trata de un documento existente.
El único problema que he observado es que si el campo ya contiene un valor, la sentencia
Código Delphi
[-]
Documento.Variables.Add('telefono', '55-00-00-00');
produce un error, porque, tal como se lee en la referencia de
Microsoft Word Visual Basic, no puede agregarse una variable que ya existe. Lo que hay que hacer en ese caso, es verificar si ya existe la variable y, de ser así, asignarle un valor directamente.
Aquí pongo un ejemplo de cómo tratar ambos casos:
Código Delphi
[-]
var
Word: Variant;
Documento: Variant;
I: Integer;
begin
Word := CreateOleObject('Word.Application');
Word.Documents.Open('C:\ruta\al\documento.doc');
Documento := Word.Documents.Item(1);
I := IndexOfName(Documento.Variables, 'nombre');
if I = 0 then
Documento.Variables.Add('nombre', 'pepe pérez')
else
Documento.Variables.Item(I).Value := 'pepe pérez';
I := IndexOfName(Documento.Variables, 'telefono');
if I = 0 then
Documento.Variables.Add('telefono', '55-00-00-00')
else
Documento.Variables.Item(I).Value := '55-00-00-00';
Documento.Fields.Update;
Word.Visible := true;
end;
IndexOfName obtiene el índice de la variable indicada en caso de que ya exista o 0 en caso contrario. Está definida así:
Código Delphi
[-]
function IndexOfName(Variables: OleVariant; Name: String): Integer;
var
I: Integer;
begin
Result := 0;
for I := 1 to Variables.Count do
if Variables.Item(I).Name = Name then
begin
Result := I;
break;
end;
end;
El código no es óptimo porque tienes que recorrer toda la lista de variables por cada variable, pero sirve para que te des una idea de lo que hay que hacer.
// Saludos