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

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 13-04-2010
Avatar de olbeup
olbeup olbeup is offline
Miembro
 
Registrado: jul 2005
Ubicación: Santiago de la Ribera (España)
Posts: 688
Poder: 21
olbeup Va camino a la fama
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.
Responder Con Cita
  #2  
Antiguo 13-04-2010
ycastilloa86 ycastilloa86 is offline
Registrado
 
Registrado: feb 2010
Posts: 3
Poder: 0
ycastilloa86 Va por buen camino
Gracias por responder olbeup, desgraciadamente con el codigo que me brindas no puedo resolver mi problema, puesto que para ello se necesita tener instalado el Excel, lo cual es mi principal problema. He buscado en todo el foro y no he podido encontrar una solucion que me sea factible. Si alguien tiene alguna sugerencia se lo agradeceria.
Responder Con Cita
  #3  
Antiguo 05-07-2010
Avatar de mRoman
mRoman mRoman is offline
Miembro
 
Registrado: nov 2003
Posts: 646
Poder: 23
mRoman Va por buen camino
En mis hilos...esta la solucion

Hola....

Busca los hilos de mi usuario MRoman, yo he tratado el tema de exportacion a excel sin tener excel instalado....ahi puse una soluición....y tengo el componente para exportar, es facil....

Checalos y cualquier cosa me comentas....

Saludos
__________________
Miguel Román

Afectuoso saludo desde tierras mexicanas....un aguachile?, con unas "cetaseas" bien "muertas"?, VENTE PUES !!
Responder Con Cita
  #4  
Antiguo 09-07-2010
Jab Jab is offline
Miembro
 
Registrado: feb 2008
Posts: 90
Poder: 0
Jab cantidad desconocida en este momento
Hola, puedes exportarlos a CSV separados por ";".
Al generarlo si lo cargas con un ordenador que tenga Excel lo abrirá convirtiendo cada trozo de separación en una columna.
Cada línea se traduce en un registro.

De esta manera como ejemplo:

CODIGO; NOMBRE; APELLIDO; DATOS; REF;
100;PEPIN; TRE; CÓMICO; REF1291
Responder Con Cita
  #5  
Antiguo 10-07-2010
Avatar de mRoman
mRoman mRoman is offline
Miembro
 
Registrado: nov 2003
Posts: 646
Poder: 23
mRoman Va por buen camino
Csv.

Fijate que yo los exporte a hojas de calculo, desde un DataSet hacia una plantilla de Excel....este archivo lo genere efectivamente en Excel, pero mi aplicacion lo toma y con el componente q tengo logro exportar estos datos a la hoja de calculo o plantilla.

Este archivo al final puede ser abierto en OpenOffice y obvio en MS Office. Es mucho mejor que usar archivos CSV, ya q las plantillas puedes manejar el formato que usan los usuarios, lo unico que haces en llenar este formato con los datos del DataSet...

Si lo q quieres es exportar a archivos con CSV, existe un componente llamado XLSExportFile, el cual guarda la información en un archivo XLS, sin necesidad que lo conviertas primero a CSV y luego le dejes esta chamba al usuario....es decir que lo abra en una aplicacion office, mejor q genere el archivo listo para ser visto.

Visita esta pagina http://www.delphiner.webcindario.com/ aqui te dejare algunos componentes para q los instales y los cheuques esperando te sirvan....
__________________
Miguel Román

Afectuoso saludo desde tierras mexicanas....un aguachile?, con unas "cetaseas" bien "muertas"?, VENTE PUES !!
Responder Con Cita
  #6  
Antiguo 10-07-2010
Avatar de mRoman
mRoman mRoman is offline
Miembro
 
Registrado: nov 2003
Posts: 646
Poder: 23
mRoman Va por buen camino
Pagina WEB

Oye Disculpa....pero mi pagina esta dando problemas, la actualice, pero algo pasa con los archivos ZIP que subi.

En fin la otra opcion es buscar con nuestro amigo Google.

Saludos, nos comentas como te fué !
__________________
Miguel Román

Afectuoso saludo desde tierras mexicanas....un aguachile?, con unas "cetaseas" bien "muertas"?, VENTE PUES !!
Responder Con Cita
  #7  
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
Respuesta



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 15:44:11.


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