Jump to content
Fórum Script Brasil
  • 0

Exportar dados de um DBGrid para o Excel


Alessandro
 Share

Question

Como muita gente utiliza o Excel para enviar por email informações sobre seus clientes, fornecedores, etc....vou postar aqui uma dica muito boa para quem quiser exportar dados de um DBGrid para o Excel em tempo de execução de uma maneira rápida e simples.

1º na Uses da Unit declare ComObj.

2º Crie um botão "Exportar para o Excel"

3º Depois de feita a consulta em um dbGrid, no evento onClick do botão criado coloque o seguinte código :

var linha, coluna : integer;
var planilha : variant;
var valorcampo : string;
begin
  Query1.CachedUpdates := true;
  planilha:= CreateoleObject('Excel.Application');
  planilha.WorkBooks.add(1);
  planilha.caption := Exportando dados do dbGrid para o Excel';
  planilha.visible := true;

  Query1.ApplyUpdates;
  Query1.First;
  for linha := 0 to Query1.RecordCount - 1 do
  begin
    for coluna := 1 to Query1.FieldCount do
    begin
      valorcampo := Query1.Fields[coluna - 1].AsString;
      planilha.cells[linha + 2,coluna] := valorCampo;
    end;
    Query1.Next;
  end;
  for coluna := 1 to Query1.FieldCount do
  begin
    valorcampo := Query1.Fields[coluna - 1].DisplayLabel;
    planilha.cells[1,coluna] := valorcampo;
  end;
  planilha.columns.Autofit;

Pronto, você acaba de exportar tudo o que você consultou em um dbGrid para o Excel.

Repare que o Excel respeita os registro se adaptando aos dados, isto porque utilizamos : planilha.columns.Autofit;

Espero que seja muito útil....

Abraços... biggrin.gif

Link to comment
Share on other sites

11 answers to this question

Recommended Posts

  • 0
Guest alekiz

Aeee Alessandro... salvou a minha vida.. kekeke

tava precisando importar pra excel e funcionou direitinho...

Valeu aí cara...

esse dai que disse que não funcionou deve ter feito merda.. no meu delphi 6 funcionou direitinho.. sem tirar nem por...

=)

é só faze do jeito que está descrito aí..

valeu...

importar não.. exportar pra excel... :P

Edited by Churc
Link to comment
Share on other sites

  • 0
Guest Srsilver
Aeee Alessandro... salvou a minha vida.. kekeke

tava precisando importar pra excel e funcionou direitinho...

Valeu aí cara...

esse dai que disse que não funcionou deve ter feito merda.. no meu delphi 6 funcionou direitinho.. sem tirar nem por...

=)

é só faze do jeito que está descrito aí..

valeu...

importar não.. exportar pra excel... :P

Houve um pequeno, porém chato problema. As datas quando o dia é menor que o mês, o excel inverte a data, como resolver?

Link to comment
Share on other sites

  • 0
Guest Srsilver
Houve um pequeno, porém chato problema. As datas quando o dia é menor que o mês, o excel inverte a data, como resolver?

Eu mesma acabei fazendo uma gambiarrinha....

Se o valor do dbgrid for data e tiver / passo somente os valores com números conforme abaixo:

if (coluna=14) or (coluna=15) or (coluna=16) then

planilha.cells[linha + 2,coluna]:= Copy(valorcampo,1,2) + '.' + Copy(valorcampo,4,2) + '.' + Copy(valorcampo,7,4)

else

planilha.cells[linha + 2,coluna]:= valorcampo;

Agora sim... depois no excel só substituir . por / !

Link to comment
Share on other sites

  • 0
Eu mesma acabei fazendo uma gambiarrinha....

Se o valor do dbgrid for data e tiver / passo somente os valores com números conforme abaixo:

if (coluna=14) or (coluna=15) or (coluna=16) then

planilha.cells[linha + 2,coluna]:= Copy(valorcampo,1,2) + '.' + Copy(valorcampo,4,2) + '.' + Copy(valorcampo,7,4)

else

planilha.cells[linha + 2,coluna]:= valorcampo;

Agora sim... depois no excel só substituir . por / !

Supondo que este campo seja do tipo TDate/TDateTime, você não experimentou apenas utilizar a formatação, tipo:

planilha.cells[linha + 2,coluna] := FormatDateTime('mm/dd/yyyy', valorcampo);

Link to comment
Share on other sites

  • 0
Guest --Amauri --

Legal ! Sua rotina esta perfeita, adaptei para uma função passando por parametro a Qruery, agora basta colocar um botão no Form e chamar a função !

Parabéns !

Só um probleminha com o Excel: não converte como número quando o valor vem formatado com virgula o centavos...

Link to comment
Share on other sites

  • 0
Guest --Rachel --

então ... este problema da data eu só atribui aspas na frente ... exemplo

Excel.WorkBooks[1].Sheets[1].Cells[Linha, 1] := '''' + FieldByName('DATA').AsDateTime;

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share



  • Forum Statistics

    • Total Topics
      151k
    • Total Posts
      649k
×
×
  • Create New...