Automatizando tarefas com o Excel

Há uma máxima entre os fabricantes de ERP que diz que o maior concorrente dos ERPs é o Excel. Por sua versatilidade em fazer cálculos, sumarizar informações e apresentar resultados em gráficos, as planilhas Excel são uma opção difícil de bater. Mesmo quando o próprio ERP disponibiliza de forma nativa os mesmos tipos de recursos, sempre há os que se sentem mais confortáveis manipulando planilhas.

Com a ABC71 isso não é diferente. E como em casa de ferreiro o espeto é de pau, nós também temos nossas planilhas. Por isso tudo, saber como automatizar leituras em uma planilha ou criar uma nova planilha com informações formatadas facilita a vida de quem prefere trabalhar com essa ferramenta.

Segundo a documentação da Microsoft no MSDN, tudo que você pode fazer através da interface gráfica do Excel também pode fazer via automação. Aliás, usando automação há coisas que você pode fazer que não estão disponíveis na interface.

Quando falo automação, me refiro a qualquer forma de acessar por programação o Excel, seja através do VBA embutido na aplicação, VBScripts externos ou através de programas Delphi ou C#. Os objetos que vou descrever aqui são os mesmos para todos esses cenários. Lembro, entretanto, que em todos eles é preciso ter o Excel instalado para que os objetos estejam acessíveis.

Application
Este objeto é a porta de entrada para automatizar o Excel. A grosso modo, equivale a carregar o programa Excel. É através dele que se controla todas as funções e configurações, permitindo acesso às planilhas propriamente ditas. Realiza, ainda, a carga e gravação de arquivos.
Se você vai automatizar usando VBA dentro do Excel, uma instância de Application está sempre disponível, automaticamente. Qualquer das outras formas, será preciso antes criar (ou obter) a instância antes de sair usando.

Workbook
Um Workbook corresponde a um arquivo XLS (ou XLSX, no Excel 2007), isto é, é a representação computacional de uma planilha Excel. Um objeto desse tipo pode ser acessado através da propriedade ActiveWorkbook do Application, que representa a planilha atualmente ativa dentro do Excel. Application tem ainda uma lista chamada Workbooks que dá acesso a cada uma das planilhas que estiverem carregadas no Excel num determinado momento.

Worksheet
Cada Workbook é composto por uma ou mais tabelas, com diversas linhas e colunas. A classe que manipula essas tabelas é chamada Worksheet e, por padrão, um Workbook é criado com três Worksheets (ou folhas de trabalho), nomeadas como Sheet1, Sheet2 e Sheet3. Esses nomes e outras propriedades de cada folha podem ser alterados por automação e estão disponíveis na propriedade Worksheets, que é uma lista com todas as folhas que compõe o Workbook com o qual se está trabalhando.

Range
Dentre os conceitos de objetos do Excel, o de Range é provavelmente o mais utilizado pois é a forma mais básica de organização e acesso das informações. É através de Ranges que se acessa o valor individual de uma célula, sua formatação, a fórmula que eventualmente esteja associada a ela, etc..
Quando montamos fórmulas de cálculo ou gráficos, teremos que nos referir a um conjunto de células agrupadas em um ou mais Ranges. A formatação de células também é feita através de Range, quer ele represente uma única célula dentro de uma folha (Worksheet), um região englobando diversas células, uma linha ou uma coluna inteiras ou até mesmo um arranjo tridimensional de células espalhas por múltiplas folhas.

Para exemplificar a leitura automatizada de uma planilha, vou me basear em um VBScript que montamos para carregar no banco de dados as informações relativas à evolução do trabalho de migração de nossos fontes para o formato Web, informações estas mantidas numa planilha Excel.

O primeiro passo é criar um objeto que representa a aplicação Excel.

Set objExcel = CreateObject(“EXCEL.APPLICATION”)

Isso carrega o Excel, permitindo que o script tenha acesso aos comandos da aplicação. Como quero trabalhar com um planilha que já existe, o passo seguinte é instruir o Excel a carregá-la. O Excel mantem uma lista das planilhas abertas em sua propriedade Workbooks; ela também é responsável pela abertura de planilhas:

Set objWorkBook = objExcel.Workbooks.Open(“c:Webtempos.xls”)

O layout da minha planilha inclui uma folha (Sheet) para cada um dos módulos do ERP da ABC71. Vou, então, montar um laço para percorrer as informações contidas em cada uma das folhas:

For I = 1 To objWorkBook.Sheets.Count
Set folha = objWorkBook.Sheets.Item(I)
‘ Incluir aqui o processamento
‘ dos dados da folha atual
Next

Nesse trecho, usei a propriedade Sheets do Workbook (planilha) aberto. Ela lista todas as folhas da planilha atual. Count contem a quantidade de folhas existentes na lista e Item permite acessar cada uma delas de forma independente, através da posição (índice) que ocupam na lista. Esse índice vai de 1 até a quantidade de folhas na lista.

Dentro de cada folha, tenho colunas com as previsões para a migração dos fontes pertencentes ao módulo. Há um cabeçalho na primeira e na segunda linha; portanto, vou começar a leitura na linha 3. Como não sei de antemão quantas linhas têm que ser processadas, vou percorrê-las até que não possuam mais dados.

lin = 3
while Trim (folha.Cells (lin, 1)) <> “”
on error resume Next

‘ Tratar dados da linha aqui

lin = lin + 1
wend

Uso a sintaxe Cells(lin,col) para obter o valor inserido numa célula específica – aquela que está onde a linha lin cruza com a coluna col. É importante observar que o valor retornado por Cells(lin,col) deve ser tratado com o tipo de dado apropriado. Isto é, as datas são do tipo Date, números são de um dos tipos numéricos (inteiros ou com decimais) e textos são do tipo string. Dependendo do contexto, será preciso realizar conversões entre os tipos de dados. Por exemplo, um comando SQL a ser submetido ao banco de dados é necessariamente um texto e dados que são numéricos – como Tempo em minha planilha – devem ser convertidos através da função CStr antes que possam ser concatenados ao comando:

tempoStr = CStr (folha.Cells (lin, 5))

Para finalizar, é preciso fechar o Workbook que foi aberto e descarregar o Excel quando ambos não forem mais necessários ao script:

objWorkBook.Close True
Set objWorkBook = Nothing
objExcel.Quit
Set objExcel = Nothing

Como isso está em um arquivo de Script, pode ser agendado como uma tarefa no Windows ou ainda ser incluído numa aplicação HTML.

Referência: Balaio Tecnológico

Luís Gustavo Fabbro

Mais artigos deste autor »

Bacharel em Ciências da Computação, formado pela Unesp Bauru. Foi responsável pelos módulos da área industrial do ERP da ABC71 Soluções em Informática entre 1993 e 1998. Em 2002, passou a ser responsável pela então nascente área de Pesquisa & Desenvolvimento da empresa. É profissional certificado pela Microsoft, com especialização na arquitetura do Sistema Operacional Windows e mantem o blog Balaio Tecnológico, dedicado a tecnologia.


2 Comentários

DANILO
1

tenho uma duvida. estou começando a aprender a criar macros, e estou querendo criar uma macro que pegue uma informação do meu excel, no caso um cpf que se encontra em uma celula do excel ex: o titulo CPF está na celula (“A1”), e o numero do CPF está na celula, (“A2”),
nesse caso eu quero pegar a informarmação de 3 contatos desse cpf que está em um site especifico, para colocar nas colinas na frente do CPF, cada uma em sua culuna.
porem não consigo criar a macro, poderiam me orientar ou ajudar a estar criando uma forma de conseguir esses dados com essa macro.?

Deixe seu comentário

Seu endereço de e-mail não será publicado. Campos com * são obrigatórios!