Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Impresión (https://www.clubdelphi.com/foros/forumdisplay.php?f=4)
-   -   Exportar a excel (https://www.clubdelphi.com/foros/showthread.php?t=85001)

Kannon 13-01-2014 17:16:32

Exportar a excel
 
Podría alguien ayudarme con un poco de código de como exportar el resultado de un DBGrid a excel? He buscado por un ejemplo pero la verdad no lo encuentro. Trabajo en C++ builder XE5 que trae el FastReport. La verdad les agradecería mucho un ejemplo sencillo.

Casimiro Notevi 13-01-2014 19:34:17

Mira abajo de esta página.
O usa las búsquedas.

juanlaplata 23-01-2014 16:11:32

Código Delphi [-]

.....

USES ComObj ;

.....

procedure Exportar_Grilla_Excel(FileName:String; Grilla: TDBGrid; ProgressBarXls: TProgressBar);
    procedure ProgressBarInit;
    begin
      ProgressBarXls.Max := Grilla.DataSource.DataSet.RecordCount;
      ProgressBarXls.Position := 0;
      ProgressBarXls.Visible := True;
    end;

var ExcelApp, Libro: Variant;
    Nombre : string;
    fila, i, j :integer;
    PBookmark: TBookmark;
begin

  // destino y nombre de archivo ******
  ForceDirectories(ExtractFilePath(ParamStr(0)) + 'Reportes');
  {Utilizaremos el SaveDialog para definir el nombre del fichero y la ruta donde se guardara el reporte pdf}
  SaveDialog1.Title := 'Exportando Reporte a Excel';
  SaveDialog1.DefaultExt := 'xls';
  SaveDialog1.InitialDir := ExtractFilePath(ParamStr(0)) + 'Reportes';

  SaveDialog1.FileName:= FileName+'.xls';

  SaveDialog1.Filter:='Archivos Excel (*.xls)|*.xls';
  SaveDialog1.FilterIndex:=1;

  try
    SaveDialog1.Execute;
    if (SaveDialog1.FileName<>'') then
      begin
      // Comprobar si existe el component TProgressBar
      if (ProgressBarXls <> nil) then
        ProgressBarInit;

      // Guardar la posición en la DB y desactivar que se mueva el registro
      PBookmark := Grilla.DataSource.DataSet.GetBookmark;
      Grilla.DataSource.DataSet.DisableControls;

      ExcelApp:=CreateOleObject('Excel.Application');

      Nombre:= SaveDialog1.FileName;
      ExcelApp.DisplayAlerts:=false;

      //Comienzo a llenar las celdas

      // crea el archivo
      ExcelApp.WorkBooks.Add();

      // determ. nombre hoja
      ExcelApp.WorkBooks[1].ActiveSheet.Name := FileName;

      // trabajo sobre la hoja
      Libro := ExcelApp.WorkBooks[1].ActiveSheet;

      // horientacion de pagina
      Libro.PageSetup.Orientation := 1;    // 1-vertical; 2-horiz

      // Fila sobre la que esta por escribir
      fila:=1;

      // agregar cabecera de Grilla    ****************************************
      for i:= 0 to Grilla.Columns.Count-1 do
        begin
        Libro.Cells[fila,i+1]:= Grilla.Columns[i].Title.Caption;
        Libro.Cells[fila,i+1].Font.Bold := True;
        Libro.Cells[fila,i+1].font.Size := 12;
        Libro.Cells[fila,i+1].font.Color := clWhite;
        Libro.Cells[fila,i+1].Interior.Color := clGray ;
        Libro.Cells[fila,i+1].HorizontalAlignment := xlcenter ;
        end;

      // Fila siguiente
      inc(fila);

      // Datos Grilla *****************************************
      Grilla.DataSource.DataSet.First;
      for i:= 1 to Grilla.DataSource.DataSet.RecordCount do
        begin
        for j:= 0 to Grilla.Columns.Count-1 do
          begin
          {Libro.Cells[fila,j+1].NumberFormat := '0';
          Libro.Cells[fila,j+1]:= Grilla.Columns[j].Field.DisplayText;}

          case Grilla.Columns[j].Alignment of
            taLeftJustify: Libro.Cells[fila,j+1].HorizontalAlignment := xlLeft;
            taRightJustify: Libro.Cells[fila,j+1].HorizontalAlignment := xlRight;
            taCenter: Libro.Cells[fila,j+1].HorizontalAlignment := xlCenter;
          end;

          case Grilla.Fields[J].DataType of
            ftAutoInc, ftBytes, ftInteger, ftSmallint, ftWord: // Auto o Numérico
              begin
              Libro.Cells[fila,j+1].NumberFormat := '0';
              Libro.Cells[fila, J +1] := Grilla.Fields[J].AsInteger;
              end;

            ftBCD, ftFloat, ftCurrency: // Numérico con decimales
              begin
              Libro.Cells[fila,j+1].NumberFormat := '0.00';
              Libro.Cells[fila, J +1] := Grilla.Fields[J].AsFloat;
              end;

            ftDateTime, ftDate, ftTime: // Fecha y Hora
              begin
              Libro.Cells[fila, J +1] := Grilla.Fields[J].AsDateTime;
              end;

            else // Todo lo demas caracteres
              begin
              Libro.Cells[fila,j+1].NumberFormat := RPad('0', '0', Length(Grilla.Fields[J].AsString));
              Libro.Cells[fila,J+1]:= Grilla.Fields[J].AsString ;
              end;
          end;

          end;

        Grilla.DataSource.DataSet.Next;
        // Fila siguiente
        inc(fila);
        
        // 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;

      // automatizar ancho de columnas
      Libro.Cells.Columns.AutoFit;
      
      // Guarda y cierra el archivo
      Libro.SaveAs(Nombre);
      ExcelApp.Visible := true;

      // posicionar el registro donde estaba
      Grilla.DataSource.DataSet.GotoBookmark(PBookmark);
      Grilla.DataSource.DataSet.FreeBookmark(PBookmark);
      Grilla.DataSource.DataSet.EnableControls;
      end;
    except
    ExcelApp.Quit;

    // Comprobar si existe el component TProgressBar
    if (ProgressBarXls <> nil) then
      ProgressBarXls.Visible := False;
      
    // posicionar el registro donde estaba
    Grilla.DataSource.DataSet.GotoBookmark(PBookmark);
    Grilla.DataSource.DataSet.FreeBookmark(PBookmark);
    Grilla.DataSource.DataSet.EnableControls;

    showmessage('No se pudo crear el Archivo Excel.');
    raise;
    end;
end;

nlsgarcia 27-01-2014 03:01:03

Kannon,

Cita:

Empezado por Kannon
...¿Como exportar el resultado de un DBGrid a Excel?...

Revisa el siguiente link, los ejemplos están en Delphi pero pueden ser adaptados a C++:
juanlaplata, Excelente ejemplo el del Msg #3 ^\||/

Espero sea útil :)

Nelson.

juanchopebe1993 22-06-2016 16:43:13

ayuda por favor
 
Hola amigo.
como puedo guardar con ruta y nombre el contenido de una celda, y codigo de .cpp gracias por tu ayuda

Casimiro Notevi 22-06-2016 17:04:03

Cita:

Empezado por juanchopebe1993 (Mensaje 506418)
Hola amigo.
como puedo guardar con ruta y nombre el contenido de una celda, y codigo de .cpp gracias por tu ayuda

Bienvenido a clubdelphi, como siempre aconsejamos a los nuevos, no olvides leer nuestra guía de estilo, gracias por tu colaboración :)


La franja horaria es GMT +2. Ahora son las 23:09:48.

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