Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Servers
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

 
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 12-05-2017
EagleKingson EagleKingson is offline
Registrado
 
Registrado: abr 2015
Posts: 8
Poder: 0
EagleKingson Va por buen camino
Combinar TWordDocument con Variant

Hola a todos, soy nuevo por aquí. Ya me leí la guía de estilo y una disculpa si el título no está bien formulado, no encontré otra forma de describirlo.

Estoy trabajando con una plantilla .odt a la cual le inserto variables. Esto es muy fácil y ya lo tengo, ya exiten hilos sobre esto pero de todas formas pongo mi código, el cual fue sacado de precisamente de foro de Club Delphi.

Código Delphi [-]
procedure TFmWord.Button1Click(Sender: TObject);
var
  Word: Variant;
  Documento: Variant;
  sRutaPlantilla, sDocumento : String;

begin
  sRutaPlantilla := ExtractFilePath(Application.ExeName)+'Plantilla\Plantilla.dotx';
  sDocumento     := ExtractFilePath(Application.ExeName)+'Documento\Documento.doc';

  if not CampoCapturado(Edit1.Text) or
     not CampoCapturado(Memo1.Text) or
     not CampoCapturado(Edit3.Text) or
     not CampoCapturado(Edit4.Text) or
     not CampoCapturado(Edit5.Text) or
     not CampoCapturado(Edit6.Text) or
     not CampoCapturado(Edit7.Text) then
    exit;
    

  try
    Word := CreateOleObject('Word.Application');


    Word.Documents.Add(sRutaPlantilla);
    Documento := Word.Documents.Item(1);

    Documento.Variables.Add('Nombre',     Edit1.Text);
    Documento.Variables.Add('Direccion',  Memo1.Text);
    Documento.Variables.Add('Folio',      Edit3.Text);
    Documento.Variables.Add('Cantidad',   Edit4.Text);
    Documento.Variables.Add('Empaque',    Edit5.Text);
    Documento.Variables.Add('Volumen',    Edit6.Text);
    Documento.Variables.Add('Peso',       Edit7.Text);

    Documento.Fields.Update;
    Documento.Fields.ToggleShowCodes;

    word.ActiveDocument.SaveAs(sDocumento); //Guarda documento con nombre asignado

    Word.Visible := true;

    //Documento.Quit; Se utiliza para cerrar word en caso de no mostrar el documento
  except
    MessageDlg('Ocurrió un error al ejecutar',mtError,[mbOk],0);
  end;
end;


NOTA: la función "CampoCapturado" es solo para verificar que todos los datos estén capturados.

Mi pregunta es cómo hacer para agregar tablas desde un TQuery a este mismo documento antes de cerrarlo. En un hilo el cual no me deja poner el enlace porque me dice que no tengo permisos, pero pondré el código que ahí se encuentra:

Código Delphi [-]
procedure InsertarTabla(DataSet: TDataSet; WordDoc: TWordDocument);
var
  WordTable: Table;
  ColIndexCount, RowCount, ColCount: Integer;
  RowIndex, ColIndex: Integer;

  Marcador : OleVariant;
begin
    RowCount := DataSet.RecordCount;
    ColCount := DataSet.Fields.Count;

    Marcador := 'TABLA_XXXX';
    //busco el marcador y si existe inserto la tabla
    if WordDocument1.Bookmarks.Exists(Marcador) then
    begin
      WordTable := WordDocument1.Tables.add(WordDocument1.Bookmarks.item(Marcador).Range, RowCount + 1, ColCount);

      //aqui hago la cabecera en negrita y en gris
      ColIndexCount := 0;
      for ColIndex := 1 to DataSet.Fields.Count do
      begin
        if DataSet.Fields[ColIndex - 1].Tag = 2 then
        begin
        ColIndexCount := ColindexCount + 1;
        WordTable.Cell(1, ColIndexCount).Range.Paragraphs.Borders.Enable := 1;
        WordTable.Cell(1, ColIndexCount).Range.Font.Bold                 := 1;
        WordTable.Cell(1, ColIndexCount).Range.Text                      := DataSet.Fields[ColIndex - 1].DisplayLabel;
        WordTable.Cell(1, ColIndexCount).Range.Paragraphs.Alignment      := wdAlignParagraphCenter;
        WordTable.Cell(1, ColIndexCount).Range.Cells.Shading.BackgroundPatternColorIndex:= wdGray25;
        end;
      end;

      RowIndex := 2;
      DataSet.First;
      while not DataSet.Eof do
      begin
        ColIndexCount := 0;
        for ColIndex := 1 to DataSet.Fields.Count do
        begin
          //los campos que su tag = 2 son los que quiero que se llenen en la tabla
          if DataSet.Fields[ColIndex - 1].Tag = 2 then
          begin
            ColIndexCount := ColindexCount + 1;
            WordTable.Cell(RowIndex, ColIndexCount).Range.Paragraphs.Borders.Enable := 1;
            WordTable.Cell(RowIndex, ColIndexCount).Range.Text                      := DataSet.Fields[ColIndex - 1].AsString;
          end;
        end;
        Inc(RowIndex);
        DataSet.Next;
      end;
    end;
end;
Aquí se puede hacer usando el componente TWordDocument y usando marcadores en la plantilla. Lo que no encuentro es cómo combinar estas dos formas de trabajar el word, es decir, no se si se pueda agregar el nuevo documento al componente TWordDocument o se hace de alguna otra forma, ya que mientras no se llegue e la línea "SaveAs", el nuevo archivo aún no tiene nombre.

PD: Trabajo con D5, Win7 y SQL Server 2014. (Según yo, mi pregunta está en el foro correcto porque la duda se refiere al componente TWordDocument).

De antemano agradezco su ayuda.

Es difícil ser un novato u_u.

Última edición por EagleKingson fecha: 12-05-2017 a las 19:20:20. Razón: El código Delphi no se viualizó correctamente.
Responder Con Cita
 


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Asignacion a un Variant gersonmaba OOP 12 13-07-2011 04:44:40
TWordDocument lcarlos API de Windows 2 14-01-2008 18:36:20
TWordDocument luxus Servers 1 31-12-2007 21:07:06
Error con variant.dcu donake Varios 3 20-12-2005 11:27:19
Variant, de que tipo? Barzaugc Varios 2 26-08-2005 21:14:30


La franja horaria es GMT +2. Ahora son las 16:33:59.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi