Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Exportar un cxGrid a Excel (https://www.clubdelphi.com/foros/showthread.php?t=87781)

magmarcelli 25-02-2015 16:54:44

Exportar un cxGrid a Excel
 
Hola, me piden exportar los datos que hayan en un cxGrid a Excel pero no se como hacerlo, soy principiante en delphi por lo que no me manejo mucho. Que componentes debo utilizar? si alguien tuviese un ejemplo con código se lo agradecería mucho;) Saludos.

jeremiselxi 25-02-2015 17:26:02

Cita:

Empezado por magmarcelli (Mensaje 489304)
Hola, me piden exportar los datos que hayan en un cxGrid a Excel pero no se como hacerlo, soy principiante en delphi por lo que no me manejo mucho. Que componentes debo utilizar? si alguien tuviese un ejemplo con código se lo agradecería mucho;) Saludos.

Es sencillo.

Supongamos que tu cxgrid se llama DBGrid1 y en ella tienes 3 campos:
No, Nóminas, Cuentas.

Solo tienes que agregar un componente llamado ExcelApplication el cual está en la paleta Servers y en un botón pones este código:


Código Delphi [-]

procedure TForm1.Button1Click(Sender: TObject);
var
  Libro : _WORKBOOK;
  Hoja  : _WORKSHEET;
  i:Integer;
begin
i:=0;
Libro := Excel.Workbooks.Add(Null, 0);
Hoja  := Libro.Sheets[1] as _WORKSHEET;

//titulo
i:=i+1;

Hoja.Range['A'+inttostr(i),'I'+inttostr(i)].Font.Bold := True; //Pone el texto en negrita
Hoja.Cells.Item[i,1]:='No';
Hoja.Cells.Item[i,2]:='Nóminas';
Hoja.Cells.Item[i,3]:='Cuentas';
  with Query1 do
    begin
    first;
      while not EOF Do
        begin
        i:=i+1;
        Hoja.Cells.Item[i,1]:=DBGrid1.Fields[0].AsString;
        Hoja.Cells.Item[i,2]:=DBGrid1.Fields[1].AsString;
        Hoja.Cells.Item[i,3]:=DBGrid1.Fields[2].AsString;
        Next;
   end;//while
end;//with


  Excel.Visible[0] := true;


end;

Si te fijas, en estas lineas se agrega el titulo o nombre de los campos:

Código Delphi [-]
Hoja.Cells.Item[i,1]:='No';
Hoja.Cells.Item[i,2]:='Nóminas';
Hoja.Cells.Item[i,3]:='Cuentas';

y en la siguiente se le pasan los campos que están en el grid a las celdas de excel:


Código Delphi [-]
        
Hoja.Cells.Item[i,1]:=DBGrid1.Fields[0].AsString;
Hoja.Cells.Item[i,2]:=DBGrid1.Fields[1].AsString;
Hoja.Cells.Item[i,3]:=DBGrid1.Fields[2].AsString;

Si tuvieras mas campos solo debes aumentar el número que está dentro de los paréntesis de color rojo:

Código Delphi [-]
Hoja.Cells.Item[i,3]:=DBGrid1.Fields[2].AsString;

Saludos

orodriguezca 25-02-2015 17:55:24

Si el cxGrid es de tipo TcxGrid (los componentes de DevExpress), es aún más sencillo que lo que expone jeremiselxi: Solo tienes que adicionar la unidad cxGridExportLink y en el código colocas lo siguiente

Código Delphi [-]
 

procedure TForm1.Button1Click(Sender: TObject); 
begin   
  ExportGridToExcel('C:\PRUEBA.XLS', CXGRID1); 
end;

magmarcelli 25-02-2015 22:30:00

Gracias por la ayuda finalmente encontré otra manera de hacerlo la cual comparto a continuación:

Código Delphi [-]
  // Establece las propiedades del cuadro de dialogo.
  SaveDialog.Filter := 'Hoja de Cálculo Excel (*.xls) | *.xls';
  SaveDialog.Title := ' Salvar listado como Hoja de Cálculo Excel';
  // Si el usuario digitó Ok en el cuadro de dialogo.
  if SaveDialog.Execute then
  begin
  // Salva la información en un archivo de Excell.
  ExportGrid4ToExcel(SaveDialog.FileName,cxGrid, False);
  MessageDlg('La información fué salvada en ' + SaveDialog.FileName, mtInformation, [mbOk], 0);
  end;

orodriguezca 25-02-2015 23:03:09

Excelentes noticias magmarcelli. Sin embargo hay que tener presente que el método ExportGrid4ToExcel aparece como "deprecated" en la versiones más nuevas. Cito una respuesta del soporte de devexpress:

Cita:

Hi Keila,
Starting with newer versions, we deprecated the ExportGrid4ToExcel method. Instead, add the cxGridExportLink unit to the USES clause and use the ExportGridToExcel method.
For additional information, refer to the "ExportGridToExcel Procedure" help topic

magmarcelli 26-02-2015 14:50:06

Ahhh si, es correcto lo que mencionas, de hecho con ExportGrid4ToExcel no me funcionó reemplacé esa parte por ExportGridToExcel y funcionó perfecto, me equivoqué al copiar la info. aquí jajajaj. Saludos!!!

Patricio 17-03-2023 12:59:01

Gracias jeremiselxi me funciono muy bien tu codigo, para los que lo usen el componente de la paleta servers que agregamos le ponemos el nombre de excel asi funciona el codigo indicado. Gracias


La franja horaria es GMT +2. Ahora son las 12:10:38.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi