Quantcast
Channel: Delphi Forum - Delphi Programming Kings of Code - Delphi Programming
Viewing all articles
Browse latest Browse all 173

EXPORT DBGRID TO EXCEL WITH TOTAL

$
0
0
procedure pExportarDadosDBGridExcel(pDBGrid :TDBGrid; PastHeader :Boolean);
var
  Excel         : Variant;
  Linha, i, Col : Integer;
  SavedBookMark : TBookMark;
  vTotal        : Array[0..1000] of Double;
begin
  try
    if not pDBGrid.DataSource.DataSet.IsEmpty then
    begin
      Excel := CreateOleObject('Excel.Application');
      Excel.Workbooks.Add;

      Linha := 1;
      Col   := 1;

      // Percorrendo todas as colunas do DbGrid
      for i := 0 to (pDBGrid.Columns.Count-1) do
      begin
        // Testando se a coluna do grid está visível
        if pDBGrid.Columns.Items.Visible = True then
        begin
          // Atribuindo valor a célula no Excel
          Excel.WorkBooks[1].Sheets[1].Cells[Linha,Col] := pDBGrid.Columns.Title.Caption;
          // Formatando o Cabeçalho
          Excel.WorkBooks[1].Sheets[1].Cells[Linha,Col].font.name := 'Verdana'; // Fonte
          Excel.WorkBooks[1].Sheets[1].Cells[Linha,Col].font.size := 8; // Tamanho da Fonte
          Excel.WorkBooks[1].Sheets[1].Cells[Linha,Col].font.bold := true; // Negrito
          Excel.WorkBooks[1].Sheets[1].Cells[Linha,Col].font.italic := true; // Italico
          Excel.WorkBooks[1].Sheets[1].Cells[Linha,Col].font.color := clBlack; // Cor da Fonte
          Excel.WorkBooks[1].Sheets[1].Cells[Linha,Col].Interior.Color := clSkyBlue; // Cor
          // Formatando Borda no Cabeçalho da Planilha
          Excel.WorkBooks[1].Sheets[1].Cells[Linha,Col].Borders.LineStyle := 1;
          Excel.WorkBooks[1].Sheets[1].Cells[Linha,Col].Borders.Weight := 2;
          Excel.WorkBooks[1].Sheets[1].Cells[Linha,Col].Borders.ColorIndex := 1;
          Col := Col+1;
        end;
      end;

      Linha := 2;
      Col   := 1;

      // Utilizando o dataset do DBGrid
      with pDBGrid.DataSource.DataSet do
      begin
        // Salvando a posição atual do cursor - linha selecionada no DBGrid
        SavedBookMark := GetBookmark;
        // Evitando que a movimentação no DataSet provoque o scroll do DBGrid
        DisableControls;
        // Posicionando no primeiro registro do DataSet
        First;

        // Percorrendo todas as linhas no DBGrid
        While not EOF do
        begin
          // Percorrendo todas as colunas do DbGrid
          for i := 0 to (pDBGrid.Columns.Count-1) do
          // Testando se a coluna do grid está visível
          if pDBGrid.Columns.Items.Visible = True then
          begin
            // Atribuindo valor a célula no Excel
            if pDBGrid.Columns.Field.DataType in [ftDateTime, ftTimeStamp] then
            begin
              Excel.WorkBooks[1].Sheets[1].Cells[Linha,Col].NumberFormat := 'dd/mm/aaaa hh:mmConfuseds';  //Formatando celula no Excel
              Excel.WorkBooks[1].Sheets[1].Cells[Linha,Col]:= ' '+pDBGrid.Columns.Field.AsString;
            end
            else
              if pDBGrid.Columns.Field.DataType in [ftBCD, ftFMTBcd, ftFloat, ftCurrency] then
              begin
                Excel.WorkBooks[1].Sheets[1].Cells[Linha,Col].NumberFormat := '###.##0,0000';  //Formatando celula no Excel
                Excel.WorkBooks[1].Sheets[1].Cells[Linha,Col]:= pDBGrid.Columns.Field.AsFloat;
              end
              else
                Excel.WorkBooks[1].Sheets[1].Cells[Linha,Col]:= pDBGrid.Columns.Field.AsString;

            if pDBGrid.Columns.Field.DataType in [ftinteger, ftFloat, ftCurrency, ftFMTBcd, ftBCD] then
              vTotal:= nvl(vTotal,0) + nvl(pDBGrid.Columns.Field.AsFloat,0);

            Col := Col+1;
          end;

          // Indo para o Proximo registro
          Next;

          Linha := Linha+1;
          Col   := 1;
        end;

        // Percorrendo todas as colunas do DbGrid
        for i:= 0 to (pDBGrid.Columns.Count-1) do
        // Testando se a coluna do grid está visível
        if pDBGrid.Columns.Items.Visible = True then
        begin
          // Atribuindo valor a célula no Excel
          Excel.WorkBooks[1].Sheets[1].Cells[Linha,Col].NumberFormat := '###.###,00';  //Formatando celula no Excel
          Excel.WorkBooks[1].Sheets[1].Cells[Linha,col] := iif(vTotal=0,'', FormatFloat('###,###.##',vTotal));
          // Formatando o Resumo
          Excel.WorkBooks[1].Sheets[1].Cells[Linha,Col].font.name := 'Verdana'; // Fonte
          Excel.WorkBooks[1].Sheets[1].Cells[Linha,Col].font.size := 8; // Tamanho da Fonte
          Excel.WorkBooks[1].Sheets[1].Cells[Linha,Col].font.bold := true; // Negrito
          Excel.WorkBooks[1].Sheets[1].Cells[Linha,Col].font.italic := true; // Italico
          Excel.WorkBooks[1].Sheets[1].Cells[Linha,Col].font.color := clNavy; // Cor da Fonte
          Excel.WorkBooks[1].Sheets[1].Cells[Linha,Col].Interior.Color := clYellow; // Cor
          Col := Col+1;
        end;

        // Reposicionando o cursor na linha em que estava antes do processo
        GotoBookMark(SavedBookMark);
        // Liberando a memória alocada pelo BookMark
        FreeBookMark(SavedBookMark);
        // Habilitando Controles
        EnableControls;
        // Utilizando recurso auto-dimensionar para ajustar o tamanho das colunas
        Excel.Columns.AutoFit;
        // Abrindo Excel
        Excel.Visible := True;

      end;
    end;

  except
    raise Exception.Create('Opção Inválida: Maquina não possui Excel instalado ou versão do Excel não é compativel!!!');
  end;
end;

 

Viewing all articles
Browse latest Browse all 173

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>