Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Tablas planas
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 09-05-2011
leogobo leogobo is offline
Miembro
NULL
 
Registrado: abr 2011
Posts: 49
Poder: 0
leogobo Va por buen camino
Pasar de dBase a excel

hola,

Estoy utilizando Lazarus y quisiera saber como hago para pasar una tabla de dBase o algunos registros especificos de ella a una hoja de excel.

Muchas gracias
Responder Con Cita
  #2  
Antiguo 09-05-2011
Avatar de duilioisola
[duilioisola] duilioisola is offline
Miembro Premium
 
Registrado: ago 2007
Ubicación: Barcelona, España
Posts: 1.735
Poder: 20
duilioisola Es un diamante en brutoduilioisola Es un diamante en brutoduilioisola Es un diamante en bruto
La forma mas fácil es leer los registros de la tabla dbase y exportarlos a un archivo separado por comas .CSV

Esto es una mezcla del codigo delphi y pseudocodigo
Código Delphi [-]
sOut := Field.AsString;
for f := 1 to FieldCount -1 do
begin
   sOut := sOut + '; '+Field.AsString;
end;

Nota: hay algunas cosas que deberás tener en cuenta:
- Los numeros con coma se deben escribir sin separador de miles y con punto (1.023,48 --> 1023.48)
- Los campos string debería entrecomillarse
Código Delphi [-]
if (FieldType = string) then sOut := sOut + '; "'+Field.AsString+'"';
Responder Con Cita
  #3  
Antiguo 27-05-2011
leogobo leogobo is offline
Miembro
NULL
 
Registrado: abr 2011
Posts: 49
Poder: 0
leogobo Va por buen camino
Hola,

He estado mirando codigos para pasar a excel desde un DBGrid y encontre este:

Código Delphi [-]
unit ExportarExcel;

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.

El problema que tengo es que cuando pongo Exel2000 en Uses, me sale este error: Can't find unit Excel2000 used by Unit1.
Veo que a muchas personas les ha funcionado, nose si alguna de ellas me podria decir como soluciono este problema y ademas como hago para llamar este procedimiento desde la accion de click en un boton. Soy novato en lazarus.

duilioisola, la verdad no entendi tu respuesta. En donde queda el archivo CVS ???

Gracias

Última edición por leogobo fecha: 27-05-2011 a las 07:14:47.
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
Pasar QReport a excel zugazua2001 Varios 2 02-02-2009 04:59:22
Pasar campos de tablas dbase a ADO JF Sebastian Conexión con bases de datos 4 19-09-2007 10:35:44
Pasar de TQuery a Excel? mrmanuel Varios 6 09-03-2007 13:32:41
Pasar de QRP a Excel Langdon Impresión 4 09-07-2006 03:54:54
Pasar tablas paradox a Dbase como ? Coco_jac Varios 6 31-01-2006 15:00:09


La franja horaria es GMT +2. Ahora son las 21:57:29.


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
Copyright 1996-2007 Club Delphi