VBA - Lendo e importando um arquivo CSV no Excel
Podemos usar os recurso do VBA (Visual Basic For Applications) no Excel para importar um arquivo CSV em uma planilha com muita facilidade.
Neste artigo eu mostro como fazer a leitura e a importação de arquivos CSV no formato padrão (delimitados por vírgula) em uma planilha Excel lendo o conteúdo do arquivo CSV enviado exibindo o seu conteúdo em uma determinada planilha.
O que é um arquivo CSV ?
Um arquivo CSV (Comma Separted Value) é um formato de arquivo que é normalmente usado para troca de dados entre aplicações diferentes. O arquivo no formato CSV possui os dados delimitados onde os campos são separados pelo caractere vírgula e registros separados por uma nova linha. Este formato de arquivo é usado no Microsoft Excel ,e tornou-se um pseudo padrão para a indústria mesmo entre plataformas não Microsoft.
Embora não exista uma especificação formal para o formato CSV, a RFC 4180 descreve um formato comum e estabelece o tipo MIME "text/csv" .
Um arquivo CSV é um arquivo texto delimitado que utiliza a vírgula para separar os valores existentes no arquivo, sendo que existem implementações onde outros separadores também podem ser usados.
Os arquivos CSV mais simples não permitem valores que contém vírgula (Ex: Rua Teste, 100) ou outros caracteres especiais como o indicador de nova linha CR ou LF. (Carriage Return/ Line Feed) . Implementações mais sofisticadas permitem vírgulas, ponto e vírgula(;), asterístico(*) como delimitadores e outros caracteres especiais.
Gerar arquivos CSV é muito simples e envolve conceitos básicos mas importantes que todo o desenvolvedor .NET deve conhecer.
Vamos criar uma classe que vai gerar um arquivo CSV, e, para realizar esta tarefa ela vai precisar receber como parâmetros as seguintes informações : o delimitador usado no arquivo CSV, os qualificadores usados no arquivo CSV, se o arquivo vai possuir cabeçalho e o DataTable que será a fonte de dados sobre a qual os dados serão gerados.
Preparando o ambiente
Os recursos usados no projeto deste artigo foram:
Antes de iniciar temos que realizar duas configurações no Microsoft Excel 2007:
Obs: A necessidade de habilitar a execução de macros é que por padrão, o Excel coloca um nível de segurança mais elevado pois códigos maliciosos podem ser executados em scripts através de macros no Excel.
Vamos ativar a guia do desenvolvedor e logo em seguida habilitar a execução de macros.
Para ativar a guia do desenvolvedor (se ainda não estiver ativa) siga os seguintes passos:
Abra o Excel 2007 e ative o Menu principal de opções clicando no botão superior a esquerda, conforme a figura abaixo;
A seguir clique na guia Opções do Excel para abrir a janela - Opções do Excel;
Nesta janela, selecione o item - Mais Usados - e a seguir marque o item - Mostrar guia Desenvolvedor na Faixa de Opções e clique no botão OK;
No menu do Excel selecione a guia do Desenvolvedor e em seguida clique em Segurança de Macro;
Na janela Central de Confiabilidade selecione a opção - Configurações de Macro - e marque o item para habilitar todas as macros conforme a figura abaixo:
Pronto , feito isso já podemos iniciar o desenvolvimento da aplicação VBA no Excel 2007.
Definindo o Cenário
No nosso exemplo vamos acessar o arquivo Clientes.txt que esta na pasta c:\dados e possui o seguinte conteúdo:
Codigo,Nome,Cidade,DataMatricula 1,Macoratti,Santos,20120411 2,Jefferson,Americana,20120417 3,Miriam,Campinas,20120410 4,Janice,Catanduva,20120405 5,Bianca,Lins,20120420 6,Ygor,Americana,20120510 7,Larrisa,Santos,20120908 8,Pedro,São Paulo,20121001 9,Marcos,Campinhas,20120618 10,Jamile,Araçatuba,20120720 |
Vamos ler o arquivo e copiar o seu conteúdo para a planilha "Plan1" do Excel.
Criando o projeto VBA
Ao iniciarmos uma Pasta de trabalho no Excel é automaticamente criado um Projeto VBA vinculado a ela. Um Projeto VBA é o equivalente à Pasta de trabalho no Excel.
Um Projeto VBA é composto por:
Dessa forma um projeto VBA pode compreender 4 tipos de componentes: a pasta, as planilhas, os módulos e os userforms.
Você pode constatar este fato ao abrir o Excel e criar uma nova pasta de trabalho em branco e em seguida pressionar as teclas ALT+F11 para alternar entre a planilha Excel e o Editor VBA:
Pressionando ALT+F11 => |
||
Vamos então abrir o Excel e criar um novo projeto com o nome LerArquivoCSV (menu Salvar Como) selecionando o tipo : Pasta de Trabalho Habilitada para Macro do Excel e clicando no botão Salvar;
A seguir pressione ALT+F11 para abrir o Editor Visual Basic (VBE);
Do VBE você pode ir para o Excel clicando no botão Excel no topo/esquerdo de sua tela . Assim usando os dois botões você pode navegar no VBE para o Excel e, vice-versa.
Vamos criar uma função que vai implementar a leitura do arquivo CSV na pasta indicada e a cópia do seu conteúdo para uma determinada planilha a pasta de trabalho.
Funções são conjuntos de declarações que retornam um valor. Um exemplo de função que criada no Microsoft Excel é a função Soma().
As funções criadas por um usuário são chamadas User Defined Function (UDF's). Podemos criar funções para realizar tarefas especializadas usando os recursos do Excel como funções e macros.
Vamos incluir um módulo no editor VBA. Para inserir um módulo usando os menus do Visual Basic, selecione (no editor do VB) Inserir => Módulo;
A seguir vamos incluir a função consultaArquivo e alterar o nome do módulo para CopiarCSV conforme abaixo:
A função consultaArquivo recebe os seguintes argumentos:
Observe que estamos selecionando a célula "A1" a partir da qual iremos copiar o conteúdo do arquivo.(.Destination:=Worksheets(planilhaDestino).Range("A1")))
Aos módulos
associados com uma pasta é dado o nome projeto. O nome
default é "VBAProject". Se você tiver
múltiplas pastas abertas, então você poderia dar a
cada uma delas seu próprio nome de projeto. Para mudar o nome de projeto default de "VBAProject", selecione Ferramentas, Propriedades de VBAProject, você verá no menu Propriedades, onde é o nome do projeto default é exibido (Propriedades de VBAProject) A janela propriedades do projeto será exibida e nela basta você alterar o nome do projeto. |
Agora vamos usar a função criada de forma a executá-la para que a tarefa seja completada.
Como podemos fazer isso ?
Podemos criar um botão de comando na Planilha Excel e chamar a função ou podemos também chamar a função a partir de um evento da pasta de trabalho(WorkBook) neste caso basta selecionar o objeto EstaPasta_de_trabalho e a seguir na janela de Código clicar em WorkBook para ativar o evento Open do objeto WorkBook;
Depois é só chamar a função consultarArquivo "Clientes.txt", "Plan1" conforme mostrado a seguir:
Dessa forma ao abrir a planilha LerArquivoCSV no Excel a função será chamada.
Outra opção é criar um botão de comando na planilha Excel.
Para isso, primeiro desabilite a chamada da função no evento Open da pasta de trabalho.
A seguir saia do Editor Visual Basic e alterne para a planilha Excel;
Clique no menu Desenvolvedor e a seguir escolha Inserir e em Controles de Formulário selecione : Botão
Posicione o mouse no formulário e desenha um Botão;
Será aberto a janela Atribui macro com o nome da macro;
Clique no botão Novo e digite o código para chamar a função no evento Clique :
A seguir salve e saia do editor VBA;
Clique com o botão direito sobre o botão e a seguir selecione Editar Texto e digite o texto: Ler e Copiar Arquivo CSV;
Pronto , agora é só alegria...
Clicando no botão de comando a função consultaArquivo() será executada e o conteúdo do arquivo clientes.txt será lido e copiado para a planilha - Plan1 - conforme vemos abaixo:
Pegue o projeto completo aqui: VBA_LerArquivoCSV.zip
Salmos 11:1
No Senhor confio. Como, pois, me dizeis: Foge para o monte, como um pássaro?Veja os Destaques e novidades do SUPER CD VB 2012 (sempre atualizado) : clique e confira ! Quer migrar para o VB .NET ? Veja mais sistemas completos para a plataforma .NET no Super CD .NET e no Super DVD .NET , confira... Quer aprender C# ?? Chegou o
Super DVD C# 2012
com exclusivo material de
suporte e vídeo aulas com curso básico sobre C# |
Referências:
Visão geral do modelo de objeto Excel: http://msdn.microsoft.com/pt-br/library/wss56bz7.aspx