Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > MS SQL Server
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

 
 
Herramientas Buscar en Tema Desplegado
  #6  
Antiguo 13-06-2011
Avatar de oscarac
[oscarac] oscarac is offline
Miembro Premium
 
Registrado: sep 2006
Ubicación: Lima - Perú
Posts: 2.015
Poder: 22
oscarac Va por buen camino
Cita:
Empezado por olbeup Ver Mensaje
Estimado ycastilloa86,

Yo utilizo una función que he ido recopilando información hasta que he conseguilo lo que queria, bueno, aun me queda por refinarlo mas, pero me sirve.

Código Delphi [-]unit FyPExportarExcel;

interface

uses
SysUtils, DB, DBGrids, ComCtrls, ComObj, Excel2000;

procedure ExportToExcel(FileNameXLS, SheetName: String;
DBGrid: TDBGrid; ProgressBarXls: TProgressBar = nil);

implementation

procedure ExportToExcel(FileNameXLS, SheetName: String;
DBGrid: TDBGrid; ProgressBarXls: TProgressBar);

procedure ProgressBarInit;
begin
ProgressBarXls.Max := DBGrid.DataSource.DataSet.RecordCount;
ProgressBarXls.Position := 0;
ProgressBarXls.Visible := True;
end;

const
xlWBATworksheet = -4167;
var
Excel, WorkBook, WorkSheet: OleVariant;
I, J: Integer;
PBookmark: TBookmark;
begin
// Guardar la posición en la DB y desactivar que se mueva el registro
PBookmark := DBGrid.DataSource.DataSet.GetBookmark;
DBGrid.DataSource.DataSet.DisableControls;
DBGrid.DataSource.DataSet.First;

// Comprobar si existe el component TProgressBar
if (ProgressBarXls <> nil) then
ProgressBarInit;

// Crear instancia de la aplicación Excel
Excel := CreateOleObject('Excel.Application');

// Evitar que nos pregunte si deseamos sobreescribir el archivo
Excel.DisplayAlerts := False;

// Agregar libro de trabajo
WorkBook := Excel.Workbooks.Add(xlWBATWorksheet);

// Tomar una referencia a la hoja creada
WorkSheet := WorkBook.WorkSheets[1];

// Se describe el nombre de la hoja
WorkSheet.Name := SheetName;

// Llenamos las celdas
// Toma en cuenta que las columnas y filas empiezan en 1, y que en el
// WorkSheet.Cells[I, J], I es la fila y J es la columna.

// Extrae los nombres de los campos del DBGrid y los coloca en el primer registro,
// excluyendo los campos que están ocultos
for J := 0 to DBGrid.FieldCount -1 do
if DBGrid.Fields[J].Visible then
begin
// Poner la fuente de letra en Negrita
WorkSheet.Cells[1, J +1].Font.Bold := True;
// Centrar la celda
WorkSheet.Cells[1, J +1].HorizontalAlignment := xlCenter;
// Asignamos Valor del titulo del DBrid
WorkSheet.Cells[1, J +1] := DBGrid.Columns[J].Title.Caption;
end;

// Guardar los registros
for I := 0 to DBGrid.DataSource.DataSet.RecordCount -1 do
begin
// Identificamos los campos y lo grabamos según su tipo
for J := 0 to DBGrid.FieldCount -1 do
case DBGrid.Fields[J].DataType of
ftAutoInc, ftBytes, ftInteger, ftSmallint, ftWord: // Auto o Numérico
WorkSheet.Cells[I +2, J +1] := DBGrid.Fields[J].AsInteger;
ftBCD, ftFloat, ftCurrency: // Numérico con decimales
WorkSheet.Cells[I +2, J +1] := DBGrid.Fields[J].AsFloat;
ftDateTime, ftDate, ftTime: // Fecha y Hora
WorkSheet.Cells[I +2, J +1] := DBGrid.Fields[J].AsDateTime;
else // Todo lo demas caracteres
WorkSheet.Cells[I +2, J +1] := DBGrid.Fields[J].AsString;
end;

// Saltamos de registro
DBGrid.DataSource.DataSet.Next;

// 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;

// Redimensionar todas las celdas para que esten según su tamaño
WorkSheet.Cells.Columns.AutoFit;

// Guardar el archivo
WorkBook.SaveAs(FileNameXLS);

// Cierra el archivo
WorkBook.Close(FileNameXLS);

// Salir de Excel
Excel.Quit;

// posicionar el registro donde estaba
DBGrid.DataSource.DataSet.GotoBookmark(PBookmark);
DBGrid.DataSource.DataSet.FreeBookmark(PBookmark);
DBGrid.DataSource.DataSet.EnableControls;
end;

end.



Un saludo.

P.D.: Si puedes aportar algo a esta función te lo agradecería.
buenas noches
me gustaria ayuda con esta funcion... yo la utilizo tambien para migrar datos de un Dbgrid a un excel...

pero se me ocurrio no utilizar los titulos (nombres de los campos), si no mas bien (lo que viene aqui es idea)... crear una matriz bidimensional (array) en el cual coloque los titulos y poder utilizar esa matriz en este procedimiento.... lo que no se es como pasar como parametro esa matriz

si alguien tuviera una idea... he revisado ejemplo de pasar matrices como parametros pero.... ninguno me funciono
__________________
Dulce Regalo que Satanas manda para mi.....
Responder Con Cita
 



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Exportar a excel odrack Varios 3 26-10-2008 05:13:35
exportar a excel alfredo torres SQL 9 08-08-2008 02:11:53
Exportar a Excel jocey Varios 3 06-11-2007 16:15:23
exportar a excel ? Enrique Impresión 2 01-09-2004 00:18:47
Exportar a Excel pruz Varios 8 01-07-2004 15:47:37


La franja horaria es GMT +2. Ahora son las 08:08:19.


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