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);
Word.Visible := true;
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';
if WordDocument1.Bookmarks.Exists(Marcador) then
begin
WordTable := WordDocument1.Tables.add(WordDocument1.Bookmarks.item(Marcador).Range, RowCount + 1, ColCount);
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
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.