PDA

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 :)