Me fue de gran utilidad para una pequeña aplicación que hice en el trabajo, solo me queda una duda. En caso de querer darle un ancho diferente a cada una de mis columnas ¿cómo podría hacerlo?
Me fue de gran utilidad para una pequeña aplicación que hice en el trabajo, solo me queda una duda. En caso de querer darle un ancho diferente a cada una de mis columnas ¿cómo podría hacerlo?
Muchas Gracias.
Prueba con esta modificación:
Código:
procedure exportarGridExcel (mGrid : tdbgrid);
var
rangoExcel : Excel2000.range;
i, fila : integer;
mMarcador : Tbookmarkstr;
mTabla : tdataset;
aplicacionExcel : TExcelApplication;
begin
//creamos libro excel (abriendo Excel)
aplicacionExcel := TExcelApplication.Create(nil);
//asociamos el dataset (tabla) del DBGrid con la tabla
//que utilizaremos en esta función
mTabla := mGrid.datasource.dataset;
//mostramos Excel
aplicacionExcel.Visible[0] := true;
//creamos un nuevo libro de Excel
aplicacionExcel.workbooks.add(NULL, 0);
//primera fila con los nombres de las columnas
//para ello recorremos todos las columnas de la tabla
//y mostramos en Excel el valor de "DisplayLabel"
rangoExcel := aplicacionExcel.ActiveCell;
for i:= 0 to mTabla.Fields.Count - 1 do
begin
rangoExcel.Value := mTabla.Fields[i].DisplayLabel;
rangoExcel := rangoExcel.Next;
rangoExcel.ColumnWidth := mTabla.Fields[i].Size;
end;
//aplicamos un autoformato de Excel a las filas y columnas añadidas
//rangoExcel.AutoFormat(10, NULL, NULL, NULL, NULL, NULL, NULL);
mTabla.DisableControls;
try
mMarcador := mTabla.Bookmark;
try
//recorremos todos los registros de la tabla para ir añadiéndolos
//a la hoja actual de Excel
mTabla.First;
fila := 2;
while not mTabla.Eof do
begin
rangoExcel := aplicacionExcel.Range['A' + inttostr(fila), 'A' + inttostr(fila)];
//recorremos todos las columnas del registro actual
for i := 0 to mTabla.Fields.Count - 1 do
begin
rangoExcel.Value := mTabla.Fields[i].AsString;
rangoExcel := rangoExcel.Next;
end;
mTabla.Next;
Inc(fila);
end;
finally
mTabla.Bookmark := mMarcador;
end;
finally
mTabla.EnableControls;
end;
end;
Te indicamos lo único que hemos modificado con respecto al procedimiento inicial:
for i:= 0 to mTabla.Fields.Count - 1 do
begin
rangoExcel.Value := mTabla.Fields[i].DisplayLabel;
rangoExcel := rangoExcel.Next;
rangoExcel.ColumnWidth := mTabla.Fields[i].Size;
end;
y hemos comentado la línea:
//aplicamos un autoformato de Excel a las filas y columnas añadidas
//rangoExcel.AutoFormat(10, NULL, NULL, NULL, NULL, NULL, NULL);
Publicado:
Mar Mar 24, 2009 7:02 am
alonsojpd Administrador/Moderador
Registrado: Sep 16, 2003 Mensajes: 2687
Asunto: Re: Formatear un rango en excel
Anuncios
En realidad, lo que le indicamos con:
Código:
rangoExcel.ColumnWidth := mTabla.Fields[i].Size;
Es que le ponga como ancho de la columna el tamaño por defecto del campo actual de la tabla. Si quieres poner un ancho fijo manual tendrás que hacerlo columna a columna, con:
Código:
rangoExcel.ColumnWidth := 50;
Ultima edición por alonsojpd el Mar Mar 24, 2009 7:07 am, editado 1 vez
Publicado:
Mar Mar 24, 2009 7:04 am
alonsojpd Administrador/Moderador
Registrado: Sep 16, 2003 Mensajes: 2687
Asunto: Re: Formatear un rango en excel
Anuncios
alonsojpd escribió:
En realidad, lo que le indicamos con:
Código:
rangoExcel.ColumnWidth := mTabla.Fields[i].Size;
Es que le ponga como ancho de la columna el tamaño por defecto del campo actual de la tabla. Si quieres poner un ancho fijo manual tendrás que hacerlo columna a columna, con:
Código:
rangoExcel.ColumnWidth := 50;
Ten en cuanta que si lo haces de forma automática con mTabla.Fields[i].Size no te aparecerán en Excel las columnas con tamaño 1, en realidad si están pero casi no se aprecian.
Puede publicar nuevos temas en este foro No puede responder a temas en este foro No puede editar sus mensajes en este foro No puede borrar sus mensajes en este foro No puede votar en encuestas en este foro
Visita nuestro nuevo sitio web con programas y contenidos actualizados: Proyecto A