Clique para saber mais...
  Home     Download     Produtos / Cursos     Revista     Vídeo Aulas     Fórum     Contato   Clique aqui para logar | 09 de Setembro de 2026
  Login

Codinome
Senha
Salvar informações

 Esqueci minha senha
 Novo Cadastro

  Usuários
126 Usuários Online

  Revista ActiveDelphi
 Assine Já!
 Edições
 Sobre a Revista

  Conteúdo
 Apostilas
 Artigos
 Componentes
 Dicas
 News
 Programas / Exemplos
 Vídeo Aulas

  Serviços
 Active News
 Fórum
 Produtos / Cursos

  Outros
 Colunistas
 Contato
 Top 10

  Publicidade

  [Artigos]  Exportação de dados utilizando o componente nativo do Delphi TExcelAplication
Publicado por ActiveDelphi : Quinta, Novembro 23, 2006 - 03:11 GMT-3 (6490 leituras)
Comentários 1 Comentário   Enviar esta notícia a um amigo Enviar para um amigo   Versão para Impressão Versão para impressão
Administrador Tentei simplificar ao máximo a vida de quem utilizará esses procedimentos (se é que alguém utilizará rsrs), pois a grande maioria dos artigos sobre este assunto, ou pelo menos os que encontrei quando precisei utilizar, são bastante complicados e com recursos que normalmente não precisamos.

O código está bastante simplificado, porém bem objetivo e, acredito eu, bastante útil.

A exportação será feita com os seguintes passos:

1. Criação de uma instância visível do MS Excel na máquina do usuário (Abre o Excel)
2. Adiciona quantas “plans” forem necessárias para armazenar os dados
3. Escreve os títulos através de comandos de atribuição
4. Escreve os dados contidos em uma Query na planilha selecionada, através de um loop (while not eof )
5. Aplica o dimensionamento automático das células para que tenhamos um ajuste perfeito
6. Ao final o método Quit e Disconnect finalizam a utilização do componente

Ao final da execução, o usuário terá o Excel aberto com a(s) planilha(s) escrita(s ) automaticamente pelo código e deverá apenas salvar a planilha, normalmente.

Agora, vamos ao que interessa – o Código!
 

Adicione os componentes TExcelApllication (que aqui chamei de Excel), TExcelWorksheet (chamada de ExcelWorkSheet1), TProgressBar (prog).

Aqui, criaremos uma procedure para o preparo da exportação dos dados

procedure TFrmForm1.ExpExcel;
var
  LCID : Integer;
  i: integer;
begin
  LCID := GetUserDefaultLCID;
  with Excel do
  begin
    Connect; //Conectando ao componente TExcelApllication
    try
       Workbooks.Add(EmptyParam, LCID); //Abrindo (internamente) uma nova instancia //do MS Excel
       //Com o Loop abaixo, adiciona-se quantas planilhas forem necessárias. Neste caso, //estamos fazendo com que sejam exibidas 7 planilhas. Assim, além das 3 que o //Excel abre como padrão, o código adicionará mais 4
      for i:=1 to 7 do
      begin
        if Worksheets.Count = 7 then break;
          Worksheets.Add(Null,Null,null,null,LCID);
      end;
      ExpQuery(LCID); // Implementaremos a seguir esta procedure, que terá a função // de exportar, efetivamente, os dados.
      prog.Position := 0; // ao fim da exportação a barra de progresso recebe 0
      //abaixo, faremos com que a WorkSheet[1] (a primeira planilha) seja conectada, //ativada e exibida (visible:= true)
      ExcelWorkSheet1.ConnectTo(Excel.Worksheets[1] as _Worksheet);
      ExcelWorkSheet1.Activate;
      Visible[LCID] := True;
      //Quit; //caso queira fechar o excel, o método quit pode ser utilizado
    finally
      //Após a exportação, haja erro ou não, o componente TExcelApplication será //desconectado.
      Disconnect;
    end;
  end;
end;


Aqui implementaremos a procedure de exportação, efetiva, dos dados.


procedure TFrmEleg.ExpQuery(LCID: Integer);
var
  lin: integer;
begin
  //Seleciona a planilha em que trabalharemos que no caso é a primeira plan (Worksheet[1])
  ExcelWorkSheet1.ConnectTo(Excel.Worksheets[1] as _Worksheet);
  //Ativa esta planilha
  ExcelWorkSheet1.Activate;
  // Dá a ela um nome
  ExcelWorkSheet1.Name := 'Nome da Planilha';
  lin:=2; //atribui 2 a variável que indicará a linha que será utilizada para escrever os dados
  with Excel do
  begin
    //nomeação das colunas na planilha que estamos criando
    Range['A1','A1'].Value2 := 'Nome da Coluna A1';
    Range['B1','B1'].Value2 := 'Nome da Coluna B1';
    Range['C1','C1'].Value2 := 'Nome da Coluna C1';
    with QueryComOsDados do //QueryComOsDados é uma TQuery contendo os dados que //advindos do Banco de Dados, os quais serão exportados.
    begin
      Close; open; first;
      prog.Max := RecordCount; //definindo o valor máximo da barra de progresso, que é //o total de registros da Query, já que exportaremos // todas as   linhas da mesma
      while not EOF do //Até o fim da Query...
      begin
        //Abaixo, fazemos uma atribuição dos campos da tabela à célula em que //queremos que estes dados sejam escritos
        // 'A'+inttostr(lin) retorna A2, A3, A4 de acordo com cada repetição
        Range['A'+inttostr(lin),'A'+inttostr(lin)].Value2 :=FieldByName('campo1').Value;
        Range['B'+inttostr(lin),'B'+inttostr(lin)].Value2 := FieldByName('campo2').Value;
        Range['C'+inttostr(lin),'C'+inttostr(lin)].Value2 := FieldByName('campo3').Value;
        Next; // Vai para o segundo registro da Query com os dados
        prog.Position := prog.Position + 1; //Incrementa a barra de progresso
        lin:=lin+1; // incrementa a variável lin para que o os dados do próximo registro // sejam escritos na próxima linha da planilha
      end;
      Close; //Fecha a Query
    end;
    // Utiliza o recurso auto-dimensionar para ajustar o tamanho das colunas
    Columns.AutoFit;
    // Centraliza o texto contido no intervalo de células entre A1 e última linha utilizada de C
    Range['A1', 'C'+inttostr(lin)].HorizontalAlignment := xlcenter;
  end;
end;


Por fim, devemos adicionar a chamada da procedure principal (ExpExcel) dentro de algum botão:


procedure TFrmForm1.btExportarClick(Sender: TObject);
begin
  //rotina de exportação para o excel
  ExpExcel;
end;


A procedure ExpExcel, como vimos, contém uma chamada para a função ExpQuery que, como também vimos, fará a exportação dos dados contidos em uma Query para uma planilha do Excel.

Espero ter ajudado. Boa Sorte e Bons Resultados!!
Abraços!

Marcelo Zeferino

marcelo.zeferino@personati.com



Comentários Comentários
   Ordem:  
Comentários pertencem aos seus respectivos autores. Não somos responsáveis pelo seus conteúdos.


por: karlosrapanui (karlosrapanui@hotmail.com) : Fev 27, 2009 - 10:44
(Informações sobre o membro | Enviar uma mensagem)
Excelente rotina.

Gostaria de saber como proceder para colocar um totalizador dos valores no final da planilha e tambem como salva-la automaticamente.

Grato
  Edição 112

Revista ActiveDelphi

  50 Programas Fontes


  Produtos

Conheça Nossos Produtos

Copyright© 2001-2016 – Active Delphi – Todos os direitos reservados