Ver la Versión Completa : Exportar a excel
Kannon
13-01-2014, 17:16:32
Podría alguien ayudarme con un poco de código de como exportar el resultado de un DBGrid a excel? He buscado por un ejemplo pero la verdad no lo encuentro. Trabajo en C++ builder XE5 que trae el FastReport. La verdad les agradecería mucho un ejemplo sencillo.
Casimiro Notevi
13-01-2014, 19:34:17
Mira abajo de esta página.
O usa las búsquedas.
juanlaplata
23-01-2014, 16:11:32
.....
USES ComObj ;
.....
procedure Exportar_Grilla_Excel(FileName:String; Grilla: TDBGrid; ProgressBarXls: TProgressBar);
procedure ProgressBarInit;
begin
ProgressBarXls.Max := Grilla.DataSource.DataSet.RecordCount;
ProgressBarXls.Position := 0;
ProgressBarXls.Visible := True;
end;
var ExcelApp, Libro: Variant;
Nombre : string;
fila, i, j :integer;
PBookmark: TBookmark;
begin
// destino y nombre de archivo ******
ForceDirectories(ExtractFilePath(ParamStr(0)) + 'Reportes');
{Utilizaremos el SaveDialog para definir el nombre del fichero y la ruta donde se guardara el reporte pdf}
SaveDialog1.Title := 'Exportando Reporte a Excel';
SaveDialog1.DefaultExt := 'xls';
SaveDialog1.InitialDir := ExtractFilePath(ParamStr(0)) + 'Reportes';
SaveDialog1.FileName:= FileName+'.xls';
SaveDialog1.Filter:='Archivos Excel (*.xls)|*.xls';
SaveDialog1.FilterIndex:=1;
try
SaveDialog1.Execute;
if (SaveDialog1.FileName<>'') then
begin
// Comprobar si existe el component TProgressBar
if (ProgressBarXls <> nil) then
ProgressBarInit;
// Guardar la posición en la DB y desactivar que se mueva el registro
PBookmark := Grilla.DataSource.DataSet.GetBookmark;
Grilla.DataSource.DataSet.DisableControls;
ExcelApp:=CreateOleObject('Excel.Application');
Nombre:= SaveDialog1.FileName;
ExcelApp.DisplayAlerts:=false;
//Comienzo a llenar las celdas
// crea el archivo
ExcelApp.WorkBooks.Add();
// determ. nombre hoja
ExcelApp.WorkBooks[1].ActiveSheet.Name := FileName;
// trabajo sobre la hoja
Libro := ExcelApp.WorkBooks[1].ActiveSheet;
// horientacion de pagina
Libro.PageSetup.Orientation := 1; // 1-vertical; 2-horiz
// Fila sobre la que esta por escribir
fila:=1;
// agregar cabecera de Grilla ****************************************
for i:= 0 to Grilla.Columns.Count-1 do
begin
Libro.Cells[fila,i+1]:= Grilla.Columns[i].Title.Caption;
Libro.Cells[fila,i+1].Font.Bold := True;
Libro.Cells[fila,i+1].font.Size := 12;
Libro.Cells[fila,i+1].font.Color := clWhite;
Libro.Cells[fila,i+1].Interior.Color := clGray ;
Libro.Cells[fila,i+1].HorizontalAlignment := xlcenter ;
end;
// Fila siguiente
inc(fila);
// Datos Grilla *****************************************
Grilla.DataSource.DataSet.First;
for i:= 1 to Grilla.DataSource.DataSet.RecordCount do
begin
for j:= 0 to Grilla.Columns.Count-1 do
begin
{Libro.Cells[fila,j+1].NumberFormat := '0';
Libro.Cells[fila,j+1]:= Grilla.Columns[j].Field.DisplayText;}
case Grilla.Columns[j].Alignment of
taLeftJustify: Libro.Cells[fila,j+1].HorizontalAlignment := xlLeft;
taRightJustify: Libro.Cells[fila,j+1].HorizontalAlignment := xlRight;
taCenter: Libro.Cells[fila,j+1].HorizontalAlignment := xlCenter;
end;
case Grilla.Fields[J].DataType of
ftAutoInc, ftBytes, ftInteger, ftSmallint, ftWord: // Auto o Numérico
begin
Libro.Cells[fila,j+1].NumberFormat := '0';
Libro.Cells[fila, J +1] := Grilla.Fields[J].AsInteger;
end;
ftBCD, ftFloat, ftCurrency: // Numérico con decimales
begin
Libro.Cells[fila,j+1].NumberFormat := '0.00';
Libro.Cells[fila, J +1] := Grilla.Fields[J].AsFloat;
end;
ftDateTime, ftDate, ftTime: // Fecha y Hora
begin
Libro.Cells[fila, J +1] := Grilla.Fields[J].AsDateTime;
end;
else // Todo lo demas caracteres
begin
Libro.Cells[fila,j+1].NumberFormat := RPad('0', '0', Length(Grilla.Fields[J].AsString));
Libro.Cells[fila,J+1]:= Grilla.Fields[J].AsString ;
end;
end;
end;
Grilla.DataSource.DataSet.Next;
// Fila siguiente
inc(fila);
// Comprobar si existe el component TProgressBar
if (ProgressBarXls <> nil) then
ProgressBarXls.Position := ProgressBarXls.Position +1;
end;
// Comprobar si existe el component TProgressBar
if (ProgressBarXls <> nil) then
ProgressBarXls.Visible := False;
// automatizar ancho de columnas
Libro.Cells.Columns.AutoFit;
// Guarda y cierra el archivo
Libro.SaveAs(Nombre);
ExcelApp.Visible := true;
// posicionar el registro donde estaba
Grilla.DataSource.DataSet.GotoBookmark(PBookmark);
Grilla.DataSource.DataSet.FreeBookmark(PBookmark);
Grilla.DataSource.DataSet.EnableControls;
end;
except
ExcelApp.Quit;
// Comprobar si existe el component TProgressBar
if (ProgressBarXls <> nil) then
ProgressBarXls.Visible := False;
// posicionar el registro donde estaba
Grilla.DataSource.DataSet.GotoBookmark(PBookmark);
Grilla.DataSource.DataSet.FreeBookmark(PBookmark);
Grilla.DataSource.DataSet.EnableControls;
showmessage('No se pudo crear el Archivo Excel.');
raise;
end;
end;
nlsgarcia
27-01-2014, 03:01:03
Kannon,
...¿Como exportar el resultado de un DBGrid a Excel?...
Revisa el siguiente link, los ejemplos están en Delphi pero pueden ser adaptados a C++:
Hojas de Excel en Delphi : http://www.clubdelphi.com/foros/showthread.php?t=84810
juanlaplata, Excelente ejemplo el del Msg #3 ^\||/
Espero sea útil :)
Nelson.
juanchopebe1993
22-06-2016, 16:43:13
Hola amigo.
como puedo guardar con ruta y nombre el contenido de una celda, y codigo de .cpp gracias por tu ayuda
Casimiro Notevi
22-06-2016, 17:04:03
Hola amigo.
como puedo guardar con ruta y nombre el contenido de una celda, y codigo de .cpp gracias por tu ayuda
Bienvenido a clubdelphi, como siempre aconsejamos a los nuevos, no olvides leer nuestra guía de estilo (http://www.clubdelphi.com/foros/guiaestilo.php), gracias por tu colaboración :)
vBulletin v3.6.8, Derechos ©2000-2024, Jelsoft Enterprises Ltd.