Acessar Células da Planilha, nelas Fazendo Anotações

MACROS PARA PLANILHA CALC (LIBREOFFICE).

Macros, para quem não sabe, é um recurso de programação oferecido pelas planilhas eletrônicas (Excel, da Microsoft, ou Calc, da LibreOffice, por exemplo).

Através delas o usuário transfere para o computador tarefas mais pesadas, ou mais extensas, ou tediosas, ou que exijam alto grau de precisão.

Não vale a pena criar uma Macro para que a planilha realize automaticamente tarefas simples, com poucos itens, e que o usuário pode fazer facil e rapidamente através do teclado. Porque criar uma macro exige, também, boa soma de trabalho, às vezes difícil, embora sempre instigante.

Demonstraremos neste blog, numa sequência de artigos, como criar macros utilizáveis na planilha Calc, da LibreOffice (software livre).

Vamos começar com um exemplo.

Estas são as primeiras 30 linhas de um arquivo que tem exatas 38.749 linhas, e que relaciona, com dados resumidos, o desempenho das escolas públicas brasileiras em relação ao IDEB, índice do Governo Federal (edições bianuais 2007 e 2009).

O nosso primeiro desafio é colocar, na coluna B (amarela, de título ORDEM) o número de ordem de cada uma das escolas listadas em ordem decrescente de IDEB 2009. Isto é, as primeiras escolas da lista são as que obtiveram os melhores resultados (as melhores médias das notas de seus alunos).

Se a lista tivesse apenas 30 linhas, seria fácil fazer isto pelo teclado, apenas digitando 1 e 2 para duas escolas de Santa Fé do Sul, 3 para Cajuru, 4 para Barrinha, e assim por diante. Mas temos 38.749 escolas para receberem seus números de ordem. É o caso de apelar para uma Macro.

Agora é com você. Clique aqui para baixar o arquivo exemplo1.xls . Carregue-o em seguida na planilha Calc. No Menu da planilha, procure e clique em Tools (Ferramentas), depois Macros, depois Organize Macros e depois LibreOffice Basic.

Vai abrir uma Caixa de Diálogo, e você vai clicar em My Macros, em Standard e em Module 1. Vai abrir a seguinte caixa:

Bom, aí está a Sub (abreviação de Subrotina) denominada Main (Principal), ainda vazia, esperando que você digite as instruções. E você vai digitar, abaixo de “Sub Main” e antes de “End Sub”, as seguintes linhas (obedecendo o formato e as separações mostradas):

Dim oDoc As Object
Dim oSheet As Object
Dim Cell As Object
Dim iCol As Long
Dim iLin As Long
Dim iLin3 As Long
Dim iOrdem As Long

iCol = 1
iLin = 5
iLin3 = 35
iOrdem = 0

oDoc = ThisComponent
oSheet = oDoc.Sheets(0)

While iLin < iLin3

iLin = iLin + 1
iOrdem = iOrdem + 1
oCell = oSheet.getCellByPosition(iCol, iLin)
oCell.Value = iOrdem

Wend

Explicações:

Dim cria objetos e variáveis. Objetos, para que o programa saiba onde atuar. No nosso exemplo, na planilha que está em uso (ThisComponent), ou seja “exemplo1.ods”, na sua primeira folha (ou sheets(0), lembrando que a contagem, no caso, começa em zero, e não em 1; a primeira folha é a folha zero). Variáveis, para armazenamento provisório de valores, fórmulas ou textos.

Os termos While e Wend  delimitam ações repetitivas sequenciais (loop). Isto é, o programa vai obedecendo as diretrizes dentro de While/Wend, linha de diretriz por linha de diretriz; chegando à última diretriz, volta à primeira e começa tudo de novo.

No presente caso, temos as anotações While iLin < iLin3 e Wend.

iLin < iLin3 estabelece um limite para a ação do programa: ele atuará até que iLin, ou seja, o número da linha da planilha atinja o valor igual a iLin3, que é o valor da última linha com dados (no arquivo exemplo1.xls, linha 35). Em outras palavras, o programa atuará começando por fazer anotação na célula da sétima linha da planilha (que o programa conhece como linha 6) e terminando com anotação na célula da trigésima sexta linha (para o programa, linha 35).

Wend indica o fim das instruções.

Nunca esqueça de colocar limite para a ação de While/Wend. O termo While deve sempre ter uma instrução de limite colada a ele (no presente exemplo, iLin < iLin3). Se não colocar limite, você não conseguirá fazer o programa parar, e acabará acarretando problemas.

Exemplo:

O programa, ao entrar no loop, acrescenta 1 a iLin (cujo valor inicial é 5), obtendo 6, número da linha da anotação inicial, e acrescenta 1 a iOrdem (cujo número inicial é 0), obtendo o número de ordem 1. A seguir, pela instrução oCell = oSheet.getCellByPosition(iCol, iLin)   acessa a célula da linha 6 (e coluna 2) da planilha, nela anotando (instrução oCell.value)   o valor armazenado em iOrdem, que é 1.

Em seguida volta à primeira diretriz (iLin = iLin + 1), acrescenta 1 unidade a iLin (que passa a 7),  vai à segunda diretriz (iOrdem = iOrdem + 1), muda para 2 o número que será anotado na célula da linha seguinte – 7 – da planilha).

E assim por diante.

Mas continuemos com a construção da macro Main. Colando as instruções acima entre Sub Main e End Sub, a caixa fica assim (vista parcial):

As cores diferenciais são fornecidas pelo programa. Salve as alterações feitas na Sub Main (clique no botão Save (ou Salvar) na parte de cima e saia da caixa clicando no X.

Em seguida, clique, na planilha onde estão os dados, em Tools, depois Macros, depois Run Macro. Abre uma caixa de diálogo e nela você clica na flechinha ao lado de My Macros, depois na flechinha ao lado de Standard, depois no nome Module 1. Aparece, à direita, a Sub Main, já selecionada. Então é só clicar em Run. Num segundo (pois o arquivo de exemplo é pequeno) estarão anotados os números de ordem das 30 escolas. O arquivo ficará então assim:

Na próxima postagem desta série sofisticaremos um pouco o programa e o resultado a obter.

Ah, e antes de sair da planilha, salve-a como planilha do Calc, de sufixo .ods. A partir de agora você vai carregar no calc sempre essa nova planilha, e não o de terminação xls.

Anúncios

Tags:


%d blogueiros gostam disto: