Jump to content


Photo

Exportar de DBGrid a Excel


  • Please log in to reply
2 replies to this topic

#1 lKinGl

lKinGl

    Advanced Member

  • Moderador
  • PipPipPip
  • 118 posts
  • LocationVenezuela

Posted 06 November 2008 - 07:29 PM

Pasos para exportar de 1 DbGrid1 a Excel

1) En la Pestaña Servers Buscamos y agregamos un componente llamado TExcelApplication
2) Esta demás decir que ya debe estar lista la consulta Sql sin errores
3) Agregar a la Uses ComObj
4) Declaramos las siguientes variables:



delphi
  1. Libro : _WORKBOOK;
  2. Hoja : _WORKSHEET;
  3. i:Integer;




5) agregamos este código dentro del begin y end del procedure, esta nos sirve para crear el archivo de excel sin Nombre, si le quieres poner nombre cambia Null por tu variable.

i nos manejará el número de filas




delphi
  1. i:=0;
  2. Libro := ExcelApplication1.Workbooks.Add(Null, 0);




6)luego agregamos esta nueva linea de código en donde elegimos en que Hoja vamos a trabajar



delphi
  1. Hoja := Libro.Sheets[1] as _WORKSHEET;



7) Luego agregamos este código:




delphi
  1. with Query1 do
  2. begin
  3. first;
  4. while not EOF Do
  5. begin
  6. i:=i+1;
  7.           Hoja.Cells.Item[i,1]:=DBGrid1.Fields[0].AsString;
  8.           Hoja.Cells.Item[i,2]:=DBGrid1.Fields[1].AsString;
  9.           Hoja.Cells.Item[i,3]:=DBGrid1.Fields[2].AsString;
  10.           Hoja.Cells.Item[i,4]:=DBGrid1.Fields[3].AsString;
  11.           Hoja.Cells.Item[i,5]:=DBGrid1.Fields[4].AsString;
  12.           Hoja.Cells.Item[i,6]:='Bs.F '+DBGrid1.Fields[5].AsString;
  13.           Hoja.Cells.Item[i,7]:='Bs.F '+DBGrid1.Fields[6].AsString;
  14.           Hoja.Cells.Item[i,8]:=DBGrid1.Fields[7].AsString;
  15.           Hoja.Cells.Item[i,9]:='Bs.F '+DBGrid1.Fields[8].AsString;
  16.           Hoja.Cells.Item[i,10]:='Bs.F '+DBGrid1.Fields[9].AsString;
  17. Next;
  18. end;//while
  19. end;//with




8) ahora pedimos que el libro que ahora está listo se abra y muestre los datos que agregamos




delphi
  1. ExcelApplication1.Visible[1]:=true;



Aqui encontré la forma para exportar con bordes ;) cada a b c d e f g h i j es la columna y i es la fila al pasar por el for nos hace esto a*i  b*i  c*1 de esta manera todas las celdas quedan con el borde :p



delphi
  1.   For b:=9 to i do
  2.     begin
  3.       Hoja.Range['a'+IntToStr(b),'a'+IntToStr(b)].BorderAround(xlContinuous,xlTransparent,xlAutomatic,EmptyParam);
  4.       Hoja.Range['b'+IntToStr(b),'b'+IntToStr(b)].BorderAround(xlContinuous,xlTransparent,xlAutomatic,EmptyParam);
  5.       Hoja.Range['c'+IntToStr(b),'c'+IntToStr(b)].BorderAround(xlContinuous,xlTransparent,xlAutomatic,EmptyParam);
  6.       Hoja.Range['d'+IntToStr(b),'d'+IntToStr(b)].BorderAround(xlContinuous,xlTransparent,xlAutomatic,EmptyParam);
  7.       Hoja.Range['e'+IntToStr(b),'e'+IntToStr(b)].BorderAround(xlContinuous,xlTransparent,xlAutomatic,EmptyParam);
  8.       Hoja.Range['f'+IntToStr(b),'f'+IntToStr(b)].BorderAround(xlContinuous,xlTransparent,xlAutomatic,EmptyParam);
  9.       Hoja.Range['g'+IntToStr(b),'g'+IntToStr(b)].BorderAround(xlContinuous,xlTransparent,xlAutomatic,EmptyParam);
  10.       Hoja.Range['h'+IntToStr(b),'h'+IntToStr(b)].BorderAround(xlContinuous,xlTransparent,xlAutomatic,EmptyParam);
  11.       Hoja.Range['i'+IntToStr(b),'i'+IntToStr(b)].BorderAround(xlContinuous,xlTransparent,xlAutomatic,EmptyParam);
  12.       Hoja.Range['j'+IntToStr(b),'j'+IntToStr(b)].BorderAround(xlContinuous,xlTransparent,xlAutomatic,EmptyParam);
  13.     end;



Nuestro código final nos queda asi:




delphi
  1. procedure TForm5.BitBtn1Click(Sender: TObject);
  2. var
  3. Libro : _WORKBOOK;
  4. Hoja : _WORKSHEET;
  5. i,b:Integer;
  6. begin
  7. i:=10;
  8. Libro := ExcelApplication1.Workbooks.Add(Null, 0);
  9. Hoja := Libro.Sheets[1] as _WORKSHEET;
  10. Hoja.Cells.Item[2,1]:=label16.Caption+' de '+label17.Caption;
  11. Hoja.Cells.Item[3,1]:='R.I.F.: '+label19.Caption;
  12. Hoja.Cells.Item[4,1]:='Libro de Ventas de '+label18.Caption;
  13. Hoja.Cells.Item[2,1].font.size:=16;
  14. Hoja.Cells.Item[3,1].font.size:=14;
  15. Hoja.Cells.Item[4,1].font.size:=12;
  16. Hoja.Cells.Item[10,1]:='Oper';
  17. Hoja.Cells.Item[10,2]:='Fecha';
  18. Hoja.Cells.Item[10,3]:='R.I.F.';
  19. Hoja.Cells.Item[10,4]:='Nombre ó Razón Social';
  20. Hoja.Cells.Item[9,5]:='Número de';
  21. Hoja.Cells.Item[10,5]:='Factura';
  22. Hoja.Cells.Item[9,6]:='Ventas';
  23. Hoja.Cells.Item[10,6]:='Exentas';
  24. Hoja.Cells.Item[9,7]:='Total';
  25. Hoja.Cells.Item[10,7]:='Ventas';
  26. Hoja.Cells.Item[10,8]:='I.V.A.';
  27. Hoja.Cells.Item[9,9]:='Base';
  28. Hoja.Cells.Item[10,9]:='Imponible';
  29. Hoja.Cells.Item[9,10]:='Impuesto';
  30. Hoja.Cells.Item[10,10]:='I.V.A.';
  31. Hoja.Cells.Item[1,1].Font.Bold:=True;
  32. Hoja.Cells.Item[10,1].Font.Bold:=True;
  33. Hoja.Cells.Item[10,2].Font.Bold:=True;
  34. Hoja.Cells.Item[10,3].Font.Bold:=True;
  35. Hoja.Cells.Item[10,4].Font.Bold:=True;
  36. Hoja.Cells.Item[9,5].Font.Bold:=True;
  37. Hoja.Cells.Item[10,5].Font.Bold:=True;
  38. Hoja.Cells.Item[9,6].Font.Bold:=True;
  39. Hoja.Cells.Item[10,6].Font.Bold:=True;
  40. Hoja.Cells.Item[9,7].Font.Bold:=True;
  41. Hoja.Cells.Item[10,7].Font.Bold:=True;
  42. Hoja.Cells.Item[10,8].Font.Bold:=True;
  43. Hoja.Cells.Item[9,9].Font.Bold:=True;
  44. Hoja.Cells.Item[10,9].Font.Bold:=True;
  45. Hoja.Cells.Item[9,10].Font.Bold:=True;
  46. Hoja.Cells.Item[10,10].Font.Bold:=True;
  47.   with zQuery1 do
  48.   begin
  49.     first;
  50.       while not EOF Do
  51.         begin
  52.           i:=i+1;
  53.           Hoja.Cells.Item[i,1]:=DBGrid1.Fields[0].AsString;
  54.           Hoja.Cells.Item[i,2]:=DBGrid1.Fields[1].AsString;
  55.           Hoja.Cells.Item[i,3]:=DBGrid1.Fields[2].AsString;
  56.           Hoja.Cells.Item[i,4]:=DBGrid1.Fields[3].AsString;
  57.           Hoja.Cells.Item[i,5]:=DBGrid1.Fields[4].AsString;
  58.           Hoja.Cells.Item[i,6]:='Bs.F '+DBGrid1.Fields[5].AsString;
  59.           Hoja.Cells.Item[i,7]:='Bs.F '+DBGrid1.Fields[6].AsString;
  60.           Hoja.Cells.Item[i,8]:=DBGrid1.Fields[7].AsString;
  61.           Hoja.Cells.Item[i,9]:='Bs.F '+DBGrid1.Fields[8].AsString;
  62.           Hoja.Cells.Item[i,10]:='Bs.F '+DBGrid1.Fields[9].AsString;
  63.           Next;
  64.         end;//while
  65.   end;//with
  66.   For b:=9 to i do
  67.     begin
  68.       Hoja.Range['a'+IntToStr(b),'a'+IntToStr(b)].BorderAround(xlContinuous,xlTransparent,xlAutomatic,EmptyParam);
  69.       Hoja.Range['b'+IntToStr(b),'b'+IntToStr(b)].BorderAround(xlContinuous,xlTransparent,xlAutomatic,EmptyParam);
  70.       Hoja.Range['c'+IntToStr(b),'c'+IntToStr(b)].BorderAround(xlContinuous,xlTransparent,xlAutomatic,EmptyParam);
  71.       Hoja.Range['d'+IntToStr(b),'d'+IntToStr(b)].BorderAround(xlContinuous,xlTransparent,xlAutomatic,EmptyParam);
  72.       Hoja.Range['e'+IntToStr(b),'e'+IntToStr(b)].BorderAround(xlContinuous,xlTransparent,xlAutomatic,EmptyParam);
  73.       Hoja.Range['f'+IntToStr(b),'f'+IntToStr(b)].BorderAround(xlContinuous,xlTransparent,xlAutomatic,EmptyParam);
  74.       Hoja.Range['g'+IntToStr(b),'g'+IntToStr(b)].BorderAround(xlContinuous,xlTransparent,xlAutomatic,EmptyParam);
  75.       Hoja.Range['h'+IntToStr(b),'h'+IntToStr(b)].BorderAround(xlContinuous,xlTransparent,xlAutomatic,EmptyParam);
  76.       Hoja.Range['i'+IntToStr(b),'i'+IntToStr(b)].BorderAround(xlContinuous,xlTransparent,xlAutomatic,EmptyParam);
  77.       Hoja.Range['j'+IntToStr(b),'j'+IntToStr(b)].BorderAround(xlContinuous,xlTransparent,xlAutomatic,EmptyParam);
  78.     end;
  79. ExcelApplication1.Visible[1]:=true;
  80. end;



Hoja.Cells.Item[fila,columna].font.size:=16; // para el tamaño de fuente de una celda
Hoja.Cells.Item[fila,columna].Font.Bold:=True; // para poner una celda en negrita

espero les guste y les sea util

Salu2

Cualquier duda o pregunta sobre este tutorial, puedes abrir un hilo en el foro adecuado.

  • 0

#2 vzavaletag

vzavaletag

    Newbie

  • Miembros
  • Pip
  • 1 posts
  • LocationPeru

Posted 18 December 2008 - 11:38 PM

Hola: :p
Esto esta exelente, me ayudastes bastante, ojala se pudiera darle color a las titulos y a las celdas.
Saludos.

  • 0

#3 coso

coso

    Member

  • Miembros
  • PipPip
  • 12 posts
  • LocationEspaña

Posted 19 December 2008 - 04:43 AM

Tambien se puede hacer asi



delphi
  1.     q := TADOQuery.Create(nil);
  2.     q.Connection := ADOConnection;
  3.     q.Active := false;
  4.     q.SQL.Text := 'select * into ["Excel 8.0;Database=c:\test.xls"].[tabla_uno] from tabla1';
  5.     q.ExecSQL;
  6.     q.Free;


en cuanto a la carga de datos

  • 0




IP.Board spam blocked by CleanTalk.