PDA

Ver la Versión Completa : Insertar tabla en una posicion de word


toni.vi
31-05-2011, 02:03:48
He estado revisando diferentes hilos y no termino de encontrar la solución de insertar una tabla en un lugar especifico.
WordTable := WordDoc.Tables.add(WordDoc.Paragraphs.last.Range, RowCount, ColCount);

En lugar de WordDoc.Paragraphs.last.Range
debería posicionarme y no se como hacerlo.
Alguna idea.
D7

toni.vi
31-05-2011, 12:12:01
De hecho lo que necesito es que en medio de un documento donde haya un texto localizable o un marcador, insertar un tabla y pasar los registros.
Esto ultimo ya lo se hacer, con el código que he encontrado en el foro, pero no se como posicionarme e insertar, siempre me inserta o mejor me añade al final del documento y no en la posición que quiero.
Ejemplo:
Documento word
bla...............
bla...............
aqui insertar la tabla
bla...............
bla...............

Gracias

rafita
24-06-2011, 13:22:51
Hola Toni,
Como suele ser habitual en mis respuestas no doy una solución a tu problema, pero te explico las opciones que he utilizado cuando se me han planteado situaciones similares a la que planteas:

1º) Insertar la tabla al final y después he añadido el resto del documento, salvo lo que pueda poner en un pie de página. Esto lo hago cuando son pocas líneas.

2º) Monto todo el contenido de lo que va a ser la tabla, separando los campos por tabuladores (#9) y las filas con cambios de línea (#13). Una vez que tengo todo montado lo que hago es sustituir un marcador dentro del texto word.

Suerte, y no dejes de comentar la solución que aplicas.

toni.vi
24-06-2011, 15:28:13
la solución que he implementado es:
1.- Busco un marcador que es donde insertaré la tabla, posicionandome en este rango.
2.- Inserto la tabla.

Gracias por tu respuesta.

Toni

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;