Ir para conteúdo
Fórum Script Brasil
  • 0

Exportar dados de um DBGrid para o Excel


Alessandro

Pergunta

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 para o comentário
Compartilhar em outros sites

11 respostass a esta questão

Posts Recomendados

  • 0

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

Editado por Churc
Link para o comentário
Compartilhar em outros 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 para o comentário
Compartilhar em outros 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 para o comentário
Compartilhar em outros 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 para o comentário
Compartilhar em outros 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 para o comentário
Compartilhar em outros 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 para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152k
    • Posts
      651,8k
×
×
  • Criar Novo...