Lenguaje de programación Borland Delphi
Os mostramos un ejemplo sobre cómo exportar un TDBGrid, un DataGrid, un Grid de Delphi (rejilla de datos) automáticamente a una hoja de cálculo Microsoft Excel.
Os indicamos el código fuente completo de la función que utilizaremos para tal cometido y un ejemplo de uso.
Para realizarlo hemos utilizado un componente que incluye el propio Delphi, llamado "TExcelApplication". En el USES del formulario o unidad donde coloquemos la función necesitaremos una referencia a las siguientes unidades:
Excel2000, db, DBGrids, variants
unit UnidadProcedimientos;
interface
uses Classes, registry, windows, IdGlobal, SysUtils, inifiles,
forms, OleServer, Excel2000, db, DBGrids, variants;
var
...
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;
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;
//se podría formatear para dejar con mejor aspecto
//rangoExcel:=aplicacionExcel.Range['A1','E'+inttostr(row-1)];
//rangoExcel.AutoFormat(3,NULL,NULL,NULL,NULL,NULL,NULL);
end;
Un ejemplo de uso, podría ser en el formulario donde se encuentre el dbgrid, en el evento OnClick de un botón que pongamos a tal efecto. Supondremos que el botón (TButton) se llama "btExportarGridExcel":
procedure TformMenuPrincipal.btExportarGridExcelClick (Sender: TObject);
begin
exportarGridExcel (grid);
end;
Publicado el: 2004-08-30