Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Exportar Datos de DBGrid a Word (https://www.clubdelphi.com/foros/showthread.php?t=92519)

Franfarnaz 18-11-2017 14:31:28

Exportar Datos de DBGrid a Word
 
Hola a todos.

Vengo trabajando en una aplicación para administrar procesos legales y llego al punto de brindarle al usuario la opción de imprimir un reporte de seguimiento a cada proceso. este seguimiento se puede visualizar en pantalla a través de un DBGrid. esta información que esta en el DBGrid quiero pasarla a word alojandola en campos Docvariables. Como puedo crear tantas variables sean necesarias?

Código Delphi [-]
Word := CreateOleObject('Word.Application');
  Word.Documents.Add('D:\Planilla.dot');
  Documento := Word.Documents.Item(1);

  while not DBGrid1.DataSource.DataSet.Eof do
  begin
    A:=Dbgrid1.Fields[0].AsString;
    B:=DBGrid1.Fields[1].AsString;
    C:=DBGrid1.Fields[2].AsString;
    Documento.Variables.Add('Nombre', A);
    Documento.Fields.Update;
    DBGrid1.DataSource.DataSet.Next;

  end;
  Word.ActiveWindow.View.ShowFieldCodes := false;
  Word.Visible := true;
  Word.Documents.Save;

En el codigo anterior recorro todo el db grid, pero solo tomo de ese recorrido los campos que necesito y los guardo en las variables A,B y C. de momento solo tomo lo guardado en la variable A y lo exporto a el campo creado en la plantilla que se llama NOMBRE (es un campo DocVariable). pero si mi registro es mas de uno, cuando se quiera exportar el segundo me genera un error por que ese campo en word ya le fue asignado un valor. por eso es la necesidad de crear esos campos desde el codigo.

Se que a través del método Documento.fields.Add( Range , Type , Text , PreserveFormatting ), se generan los campos, pero no lo he conseguido hacer en delphi 7.

gracias de antemano.

Casimiro Notevi 18-11-2017 19:03:26

Mira los enlaces de final de página.

Franfarnaz 18-11-2017 23:12:54

Cita:

Empezado por Casimiro Notevi (Mensaje 522624)
Mira los enlaces de final de página.

Muy amable señor, pero en los link que mencionas y los links que se mencionan dentro de los post que me recomiendas, algunos nunca recibieron ayuda y los que recibieron solo hacen referencias a campos creados previamente en la plantilla. lo que trato de hacer es a través de un comando crear estos campos desde el código en delphi para así poder exportar tantas variables sean necesarias. muy agradecido por su colaboracion.

Casimiro Notevi 19-11-2017 02:55:53

¿Esto puede ser?

Franfarnaz 19-11-2017 06:14:03

aGracias por responder, pero no....ese enlace trata el mismo tema de los otros sobre exportar a excel, busco es exportar a word pero sin crear campos DocVariables predefinidos en la plantilla, si no crearlos desde el codigo mediante el comando doc.fields.add que aun no logro hacerlo funcionar en delphi.

Franfarnaz 20-11-2017 16:57:01

Ok revisando por todas las paginas posibles en varios idiomas hasta donde los entiendo, ninguno trabaja de la forma que busco la Automatizacion en Word desde delphi, por lo que Decidí usar una sola variable que me guardara todos los registros del DbGrid y con la ayuda de saltos de linea logra darle una apariencia aceptable al informe. Espero algún día alguien encuentre la forma de crear docvariables desde el código. hasta hoy esta fue mi solucion:

Código Delphi [-]
procedure TVisual_Seguimiento.btn2Click(Sender: TObject);
var
  Word, Range: Variant;
  Documento,A, B, C, S,Codigo : Variant;
  i,o: Integer;
  Val, FldType,r,NomVar, FileName, TypeDoc: OleVariant;
  ArchTexto: TextFile;
begin

  Word := CreateOleObject('Word.Application');
  Word.Documents.Open('D:/Planilla.dot');
  Documento := Word.Documents.Item(1);
  //Recorro Todo el DbGrid
  while not DBGrid1.DataSource.DataSet.Eof do
  begin
    //Selecciono los campos que requiero del DBGrid, La variable código es para otro propósito.
    Codigo:=DBGrid1.Fields[1].AsString;
    A:=DBGrid1.Fields[0].AsString;
    B:=DBGrid1.Fields[2].AsString;
    C:=DBGrid1.Fields[3].AsString;
    S:=  'Fecha:'+' '+ A +#13+ 'Observaciones:'+' ' + B +#13+  'Estado:'+' ' + C +#13+ '--------------------------------------------' +#13;
    NomVar:= NomVar + S;
    DBGrid1.DataSource.DataSet.Next;

  end;
  Documento.Variables.Add('Reporte', NomVar);
  Documento.Fields.Update;
  Word.ActiveWindow.View.ShowFieldCodes := False;
  Word.Visible := true;
  Word.Documents.Save;

end;


La franja horaria es GMT +2. Ahora son las 15:53:17.

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