Você está na página 1de 25

Guia do Iniciante

Captulo 13
Introduo s Macros
Usando o Gravador de Macros e mais alm

Direitos Autorais
Este documento protegido por Copyright 2010 por seus contribuidores listados abaixo. Voc pode distribuir e/ou modificar este trabalho, tanto sob os termos da Licena Pblica Geral GNU (http://www.gnu.org/licenses/gpl.html), verso 3 ou posterior, ou da Licena de Atribuio Creative Commons (http://creativecommons.org/licenses/by/3.0/), verso 3.0 ou posterior. Todas as marcas comerciais dentro desse guia pertencem aos seus respectivos donos.

Contribuidores
A verso original em ingls deste captulo teve como autor Ron Faile Jr.. A traduo e localizao deste captulo teve como colaboradores: Claudio Filho, Marcus Gama e Raul Pacheco da Silva.

Comentrios e sugestes
Qualquer comentrio ou sugesto sobre este documento pode ser enviado para a lista: docs@pt-br.libreoffice.org

Agradecimentos
Este captulo foi baseado na verso em ingls do Captulo 13 do Getting Started with OpenOffice.org. Os colaboradores que contriburam para esse captulo foram: Andrew Pitonyak Jean Hollis Weber

Data de publicao e verso do software


Publicado em 11 de setembro de 2011. Baseado no LibreOffice 3.3.

Nota para usurios de Mac


Algumas teclas de atalho e itens de menu so diferentes, na plataforma Mac, daquelas utilizadas nas plataformas Windows e Linux. A tabela abaixo apresenta uma lista comparativa de alguns caminhos e teclas utilizados neste captulo. Para uma lista completa, veja a ajuda do LibreOffice. Windows/Linux
Seleo do menu Ferramentas Opes Clique com boto direito Ctrl (Control) F5 F11

Equivalente no Mac
LibreOffice Preferncias Control+clique
(Comando)

Resultado
Acessa as opes de configurao Abre o menu de contexto Utilizada com outras teclas Abre o Navegador Abre a janela Estilos e formatao

Shift++F5
+T

A documentao do LibreOffice est disponvel em http://pt-br.libreoffice.org/suporte/documentacao

Sumrio
Direitos Autorais............................................................................................................................... 2 Nota para usurios de Mac.............................................................................................................. 2 Sua primeira macro.......................................................................................................................... 4 Adicionando uma macro existente...............................................................................................4 Criando uma macro simples........................................................................................................5 Executando a macro.................................................................................................................... 7 Visualizando e editando a macro.................................................................................................7 Comentrios iniciam com REM...............................................................................................8 Definindo sub-rotinas com SUB..............................................................................................8 Definindo variveis usando DIM.............................................................................................9 Extraindo a macro em grupos.................................................................................................9 Criando uma macro........................................................................................................................ 10 Um exemplo complicado........................................................................................................... 10 Executando a macro rapidamente.............................................................................................13 s vezes o gravador de macro falha..............................................................................................13 A infraestrutura de envio (dispatch framework) ........................................................................13 Como o gravador de macro usa a estrutura envio.....................................................................13 Outras opes........................................................................................................................... 14 Organizao das macros............................................................................................................... 14 Onde as macros esto armazenadas?......................................................................................17 Importando macros....................................................................................................................17 Download de macros para importao......................................................................................19 Como executar uma macro............................................................................................................ 19 Item de Menu............................................................................................................................ 21 Teclas de atalho........................................................................................................................ 21 Barra de ferramentas................................................................................................................. 21 Eventos..................................................................................................................................... 22 Extenses...................................................................................................................................... 23 Escrevendo macros sem o gravador..............................................................................................24 Encontrando mais informaes......................................................................................................24 Material includo........................................................................................................................ 24 Recursos Online........................................................................................................................ 24 Materiais impressos e livros eletrnicos....................................................................................25

Introduo s Macros

Sua primeira macro


Uma macro uma sequncia de comandos salvos ou teclas digitadas que so armazenadas para uso posterior. Um exemplo de uma macro simples aquela que digita seu endereo. A linguagem macro do LibreOffice muito flexvel, permitindo a automao de tarefas simples e complexas. Macros so especialmente teis para realizar uma determinada tarefa repetidamente. Macros do LibreOffice so geralmente escritos em uma linguagem chamada LibreOffice Basic, ou abreviadamente Basic. Embora voc possa aprender e escrever macros Basic, h uma curva de aprendizagem para escrever macros a partir do zero. Os mtodos usuais para um iniciante so adicionar macros que algum j tenha escrito ou usar o gravador de macro interno, que registra suas teclas digitadas e salva-as para uso. No LibreOffice, o gravador de macro atualmente classificado como uma caracterstica experimental (instvel). Para ativar o gravador de macro, use Ferramentas Opes LibreOffice Geral e selecione a opo Ativar recursos experimentais (instveis).

Figura 1: Ativar macros na caixa de dilogo Opes A maioria das tarefas no LibreOffice so realizadas por despachar um comando (enviar um comando), que interceptado e utilizado. O gravador de macro funciona gravando os comandos que so enviados (veja A infraestrutura de envio (dispatch framework) na pgina 13).

Adicionando uma macro existente


O primeiro passo de aprendizagem na programao de macro de encontrar e utilizar macros existentes. Esta seo assume que voc tenha uma macro que voc deseja usar; a macro pode estar em um e-mail, em uma pgina da web, ou mesmo em um livro. Por este exemplo, use a macro na Listagem 1. Listagem 1: Simples macro que diz Ol
Sub Macro_Ola Print "Ol" End Sub

Introduo s Macros

Voc deve criar uma biblioteca e mdulos para conter suas macros; que esto organizadas como descrito em Organizao das macros na pgina 14. Use estas etapas para criar uma biblioteca para conter sua macro: 1) Use Ferramentas Macros Organizar macros LibreOffice Basic para abrir a caixa de dilogo de Macros (ver Figura 2 e Figura 7). 2) Clique em Organizador para abrir a caixa de dilogo do Organizador de macros do LibreOffice Basic (ver Figura 8). 3) Selecione a aba Bibliotecas. 4) Definir o Local para Minhas macros e caixas de dilogos, que o padro. 5) Clique em Nova para abrir a caixa de dilogo Nova biblioteca. Digite na caixa Nome o nome para a biblioteca, como Teste_Biblioteca e clique OK. 6) Selecione a aba Mdulos. 7) Na lista Mdulo, expanda Minhas macros e selecione Teste_Biblioteca. Um mdulo chamado Module1 j existe e pode conter sua macro. Voc pode clicar em Novo para criar outro mdulo em Teste_Biblioteca. 8) Selecione o Module1, ou o novo mdulo que voc criou, e clique Editar para abrir Ambiente de Depurao Integrado (da sigla em ingls, IDE). 9) O IDE um editor de texto para macros que permite editar e criar macros. Copie o macro no IDE. Quando um novo mdulo criado, ele contm um comentrio e uma macro chamada Main, que no faz nada. Listagem 2: Contedo do Module1 aps sua criao.
REM ***** BASIC *****

Sub Main End Sub

Adicionar a nova macro ou antes do Sub Main ou aps o End Sub. Na Listagem 3, a nova macro foi adicionada antes do Sub Main. Listagem 3: Module1 aps a adio da nova macro.
REM ***** BASIC *****

Sub Macro_Ola Print "Ola" End Sub Sub Main End Sub

Clique no boto Executar o BASIC na barra de ferramentas, ou pressione F5, para executar a primeira macro no mdulo. Use a caixa de dilogo Macros do LibreOffice Basic, aberta usando o boto Selecionar macro ou Ferramentas Macros Organizar macros LibreOffice Basic, para selecionar e executar qualquer macro no mdulo.

Criando uma macro simples


Imagine a insero repetidamente de informaes simples. Embora voc possa armazenar as informaes na rea de transferncia, se voc usar a rea de transferncia para outra coisa, o

Sua primeira macro

contedo alterado. Armazenar o contedo como uma macro uma soluo simples. (em alguns casos simples, incluindo o exemplo usado aqui, a melhor soluo a utilizao de Autotexto). 1) Use Ferramentas Macros Gravar macros para iniciar a gravao de uma macro. Uma pequena janela exibida para que voc saiba que o LibreOffice est gravando. 2) Digite as informaes desejadas ou execute uma srie de operaes apropriadas. Neste caso, eu digitei o nome Marcus Gama. 3) Clique no boto Para gravao para parar a gravao, salve a macro, e a caixa de dilogo Macros do LibreOffice Basic exibida.
Recipientes de bibliotecas Macros

Bibliotecas Mdulos

Figura 2: Caixa de dilogo Macros do LibreOffice Basic no LibreOffice, mdulo Writer selecionado 4) Esteja certo de abrir o recipiente de biblioteca chamado Minhas macros. Encontre a biblioteca chamada Standard abaixo de Minhas macros. Esteja ciente de que cada recipiente da biblioteca tem uma biblioteca chamada Standard abaixo. Selecione a biblioteca Standard e clique Novo para criar um novo mdulo para conter a macro. 5) O nome padro para o mdulo Module1. Digite um nome descritivo e clique em OK para criar o mdulo. A caixa de dilogo Macros do LibreOffice Basic mostrada novamente, mostrando o novo mdulo.

Figura 3: D ao seu mdulo um nome significativo 6) Destaque o mdulo recm criado. No canto superior esquerdo (Caixa Nome da macro), digite o nome da macro a usar, como DigiteMeuNome, e ento clique Novo para salvar a macro.

Introduo s Macros

Se voc seguiu todos os passos, a biblioteca Padro agora contm um mdulo chamado Gravando, que contm a macro DigiteMeuNome, como mostrado na Figura 4.

Nota

Quando o LibreOffice cria um novo mdulo, automaticamente adiciona a macro chamada Main.

Executando a macro
Use Ferramentas Macros Executar macro para abrir a caixa de dilogo Seletor de macro. Selecione a macro recm-criada e clique em Executar.

Figura 4: Selecione uma macro e clique em Executar Existem outros mtodos para executar uma macro. Por exemplo, use Ferramentas Macros Organizar macros LibreOffice Basic para abrir a caixa de dilogo Macros do LibreOffice Basic, que contm um boto Executar tambm. Outro mtodo usar o Organizador de macros do LibreOffice Basic; a caixa de dilogo abre mais rpida, mas o processo de seleo pode ser ligeiramente mais lento.

Visualizando e editando a macro


Voc pode ver e editar a macro que acabou de ser criada. Use Ferramentas Macros Organizar macros LibreOffice Basic para abrir a caixa de dilogo Macros do LibreOffice Basic (ver Figura 4). Selecione a nova macro e clique Editar para abrir a macro no Basic IDE (Ambiente de Depurao Integrado). Listagem 4: Gerando a macro DigiteMeuNome.
REM ***** Sub Main BASIC *****

Sua primeira macro

End Sub sub DigiteMeuNome rem ------------------------------------------------------------rem definir as variveis dim document as object dim dispatcher as object rem ------------------------------------------------------------rem ter acesso ao documento document = ThisComponent.CurrentController.Frame dispatcher = createUnoService("com.sun.star.frame.DispatchHelper") rem ------------------------------------------------------------dim args1(0) as new com.sun.star.beans.PropertyValue args1(0).Name = "Text" args1(0).Value = "Marcus Gama" dispatcher.executeDispatch(document, ".uno:InsertText", "", 0, args1()) end sub

A macro na Listagem 4 no to complicada como parece primeira vista. Aprender algumas coisas ajuda significativamente na compreenso da macro gerada. A discusso comea com caractersticas prximas do topo da lista da macro descrevendo-as. Se voc quiser pular os detalhes, ento simplesmente mude o texto Marcus Gama na macro acima para o que voc queira inserir na posio atual do cursor.

Comentrios iniciam com REM


A palavra-chave REM, sigla de remark (observao), comea um comentrio na macro. Todo o texto depois de REM (na mesma linha) ignorado. Como um atalho, o caractere de aspas simples tambm pode ser usado para iniciar um comentrio.
O LibreOffice Basic no diferencia maisculas de minsculas para palavra-chave, assim REM, Rem, e rem todos iniciam um comentrio. Se voc usa constantes simblicas definidas pela API mais seguro assumir que os nomes so sensveis caixa constantes simblicas so um tpico avanado e geralmente no so necessrias para pessoas que usam o gravador de macro.

Dica

Definindo sub-rotinas com SUB


Macros individuais so armazenadas em sub-rotinas definidas com a palavra-chave SUB. O final de uma sub-rotina indicada pelas palavras END SUB. O cdigo comea por definir a sub-rotina chamada Main, que est vazia e no faz nada. A sub-rotina seguinte, DigiteMeuNome, contm o cdigo gerado.

Dica

O LibreOffice sempre cria uma sub-rotina vazia chamada Main quando se cria um mdulo.

H tpicos avanados que esto alm do escopo deste documento, mas o conhecimento deles pode ser interessante:

Voc pode escrever uma macro de forma que os valores possam ser passados para a
sub-rotina. Os valores so chamados argumentos. Macros gravadas no aceitam argumentos.

Introduo s Macros

Outro tipo de sub-rotina chamada uma funo. Uma funo uma sub-rotina que retorna
um valor, A palavra-chave FUNCTION usada em vez de SUB para definir uma funo. Macros geradas so sempre do tipo SUB.

Definindo variveis usando DIM


Voc pode escrever informaes em um pedao de papel para que voc possa olh-lo mais tarde. Uma varivel, como um pedao de papel, contm informaes que podem ser alteradas e lidas. A declarao DIM semelhante a afixar parte um pedao de papel para ser usado para armazenar uma mensagem ou nota. A macro DigiteMeuNome define as variveis document e dispatcher como do tipo object. Outros tipos de variveis comuns incluem string, integer e date. Uma terceira varivel, chamado args1, uma matriz de valores de propriedades. Uma varivel do tipo matriz (array) permite que uma nica varivel contenha vrios valores, semelhante ao armazenamento de vrias pginas em um nico livro. Valores em uma matriz so geralmente numerados a partir do zero. O nmero entre parnteses indica o maior nmero utilizvel para acessar um local de armazenamento. Neste exemplo, existe apenas um valor, e numerado como zero.

Extraindo a macro em grupos


Os detalhes a seguir so bem completos; mas no importante compreender todos eles. A primeira linha define o incio da macro.
sub DigiteMeuNome

Declara duas variveis:


dim document as object dim dispatcher as object

Este componente se refere ao documento atual. A propriedade CurrentController de um documento se refere ao servio que controla o documento. Por exemplo, quando voc digita, este o controlador atual que acionado. O Controlador atual em seguida envia as alteraes para o quadro do documento. A propriedade Frame de um controlador retorna um quadro principal para um documento. Portanto, a varivel chamada document refere-se a um quadro do documento, que recebe os comandos enviados.
document = ThisComponent.CurrentController.Frame

A maioria das tarefas no LibreOffice so realizadas enviando um comando. O LibreOffice inclui um servio de auxiliador de envio (dispatch helper), que faz a maior parte do trabalho de envio nas macros. O mtodo createUnoService aceita nome de um servio e ele tenta criar uma instncia deste servio. Concluindo, a varivel dispatcher contm uma referncia para um DispatchHelper.
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

Declare uma matriz de propriedades. Cada propriedade tem um nome e um valor, em outras palavras, um par nome / valor. A matriz criada tem uma propriedade no ndice zero.
dim args1(0) as new com.sun.star.beans.PropertyValue

Dar a propriedade o nome Text e o valor Marcus Gama, que o texto que inserido quando a macro executada.
args1(0).Name = "Text" args1(0).Value = "Marcus Gama"

Aqui onde a mgica acontece. O auxiliador de envio (dispatch helper) envia uma mensagem para o quadro do documento (armazenado na varivel chamada document) com o comando .uno:InsertText. Os dois prximos argumentos, frame name e search flags, esto fora do escopo

Sua primeira macro

deste documento. O ltimo argumento a matriz de valores de propriedades para ser usada durante a execuo do comando InsertText.
dispatcher.executeDispatch(document, ".uno:InsertText", "", 0, args1())

Finalmente, o final da sub-rotina.


end sub

Criando uma macro


Ao criar uma macro, importante fazer duas perguntas antes da gravao: 1) A tarefa pode ser escrita como um simples conjunto de comandos? 2) Etapas podem ser organizadas de tal forma que o ltimo comando deixe o cursor pronto para o prximo comando?

Um exemplo complicado
Eu frequentemente copio linhas e colunas de dados para uma pgina Web e formato-os como uma tabela em um documento de texto. Primeiro, eu copio a tabela a partir da pgina Web para a rea de transferncia. Para evitar formatao e fontes estranhas, eu copio o texto em um documento do Writer como texto no formatado. Eu reformato o texto com separador entre as colunas para que eu possa usar Tabela Converter De texto para tabela para converter para uma tabela. Eu inspeciono o texto para ver se eu posso gravar uma macro para formatar o texto (lembre-se as duas questes que eu fiz). Como exemplo, eu copiei o grupo de constantes de peso da fonte da pgina Web do LibreOffice. A primeira coluna indica o nome constante. Cada nome seguido por um espao e uma tabulao. NOSEI FINO ULTRACLARO CLARO SEMICLARO NORMAL SEMINEGRITO NEGRITO ULTRANEGRITO PRETO O peso da fonte no especificado / conhecido. especifica 50% do peso da fonte. especifica 60% do peso da fonte. especifica 75% do peso da fonte. especifica 90% do peso da fonte. especifica um peso de fonte normal. especifica 110% do peso da fonte. especifica 150% do peso da fonte. especifica 175% do peso da fonte. especifica 200% do peso da fonte.

Eu quero que a primeira coluna contenha um valor numrico, a segunda coluna o nome, e a terceira coluna a descrio. O trabalho desejado facilmente realizado para cada linha exceto para NOSEI e NORMAL, que no contm um valor numrico, mas eu sei que os valores so 0 e 100, por isto eu vou inserir estes valores manualmente. O dados podem ser limpos de vrias formas, em todos elas de maneira fcil. O primeiro exemplo usa atalhos de teclado que assumem que o cursor estar no incio da linha com o texto FINO. 1) Use Ferramentas Macros Gravar macro para iniciar a gravao. 2) Pressione Crtl+Seta para a direita para mover o cursor para o incio da especifica.
10 Introduo s Macros

3) Pressione Backspace duas vezes para remover a tabulao e o espao. 4) Pressione Tab para adicionar a tabulao sem o espao depois do nome constante. 5) Pressione Delete para excluir a minscula e e ento pressione E para adicionar uma letra E maiscula. 6) Pressione Ctrl+Seta para a direita uma vez para mover o cursor para o incio do nmero. 7) Pressione Ctrl+Shift+Seta para a direita para selecionar e mover o cursor antes do sinal %. 8) Pressione Ctrl+C para copiar o texto selecionado para a rea de transferncia. 9) Pressione End para mover o cursor para o final da linha. 10) Pressione Blackspace duas vezes para remover os dois espaos direita. 11) Pressione Home para mover o cursor para o incio da linha. 12) Pressione Ctrl+V para copiar o nmero selecionado para o incio da linha. 13) Colar um valor tambm adiciona um espao extra, ento pressione Blackspace para remover o espao extra. 14) Pressione Tab para inserir uma tabulao entre o nmero e o nome. 15) Pressione Home para mover para o incio da linha. 16) Pressione seta para baixo para mover para a prxima linha. 17) Parar a gravao da macro e salvar a macro. Leva muito mais tempo para ler e escrever as etapas do gravador de macro. Trabalhe lentamente e pense sobre as etapas que far. Com a prtica isto fica mais intuitivo. A macro gerada foi modificada para conter o nmero de etapas nos comentrios para coincidir com o cdigo para a etapa acima. Listagem 5: Copia o valor numrico para o incio da coluna.
sub CopiaNumParaCol1 rem ------------------------------------------------------------rem definir as variveis dim document as object dim dispatcher as object rem ------------------------------------------------------------rem ter acesso ao documento document = ThisComponent.CurrentController.Frame dispatcher = createUnoService("com.sun.star.frame.DispatchHelper") rem (2) Pressione Ctrl+Seta para a direita para mover o cursor para o incio da palavra especifica. dispatcher.executeDispatch(document, ".uno:GoToNextWord", "", 0, Array()) rem (3) Pressione Backspace duas vezes para remover a tabulao e o espao. dispatcher.executeDispatch(document, ".uno:SwBackspace", "", 0, Array()) rem ------------------------------------------------------------dispatcher.executeDispatch(document, ".uno:SwBackspace", "", 0, Array()) rem (4) Pressione Tab para adicionar a tabulao sem o espao depois do nome da constante. dim args4(0) as new com.sun.star.beans.PropertyValue args4(0).Name = "Text" args4(0).Value = CHR$(9) dispatcher.executeDispatch(document, ".uno:InsertText", "", 0, args4())

Criando uma macro

11

rem (5) Pressione Delete para excluir a letra minscula e .... dispatcher.executeDispatch(document, ".uno:Delete", "", 0, Array()) rem (5) ... e ento pressione E para adicionar uma letra E maiscula. dim args6(0) as new com.sun.star.beans.PropertyValue args6(0).Name = "Text" args6(0).Value = "E" dispatcher.executeDispatch(document, ".uno:InsertText", "", 0, args6()) rem (6) Pressione Ctrl+Seta para a direita uma vez para mover o cursor para o nmero. dispatcher.executeDispatch(document, ".uno:GoToNextWord", "", 0, Array()) rem (7) Pressione Ctrl+Shift+Seta para direita para selecionar o nmero. dispatcher.executeDispatch(document, ".uno:WordRightSel", "", 0, Array()) rem (8) Pressione Ctrl+C para copiar o texto selecionado para a rea de tranferncia. dispatcher.executeDispatch(document, ".uno:Copy", "", 0, Array()) rem (9) Pressione End para mover o cursor para o final da linha. dispatcher.executeDispatch(document, ".uno:GoToEndOfLine", "", 0, Array()) rem (10) Pressione Backspace duas vezes para remover os dois espaos direita. dispatcher.executeDispatch(document, ".uno:SwBackspace", "", 0, Array()) rem ------------------------------------------------------------dispatcher.executeDispatch(document, ".uno:SwBackspace", "", 0, Array()) rem (11) Pressione Home para mover o cursor para o incio da linha. dispatcher.executeDispatch(document, ".uno:GoToStartOfLine", "", 0, Array()) rem (12) Pressione Ctrl+V para colar o nmero selecionado para o incio da linha. dispatcher.executeDispatch(document, ".uno:Paste", "", 0, Array()) rem (13) Pressione Backspace para remover o espao extra. dispatcher.executeDispatch(document, ".uno:SwBackspace", "", 0, Array()) rem (14) Pressione Tab para inserir uma tabulao entre o nmero e o nome. dim args17(0) as new com.sun.star.beans.PropertyValue args17(0).Name = "Text" args17(0).Value = CHR$(9) dispatcher.executeDispatch(document, ".uno:InsertText", "", 0, args17()) rem (15) Pressione Home para mover para o incio da linha. dispatcher.executeDispatch(document, ".uno:GoToStartOfLine", "", 0, Array()) rem (16) Pressione Seta para baixo para mover para a prxima linha. dim args19(1) as new com.sun.star.beans.PropertyValue args19(0).Name = "Count" args19(0).Value = 1 args19(1).Name = "Select" args19(1).Value = false

12

Introduo s Macros

dispatcher.executeDispatch(document, ".uno:GoDown", "", 0, args19()) end sub

Movimentos do cursor so usados para todas as operaes (em oposio pesquisa). Se for executado na linha NOSEI, a palavra peso movida para a frente da linha, e o primeiro O alterado para E. Isto no o perfeito. Mas eu no deveria ter executado a macro sobre as linhas que no tem o formato adequado; eu preciso adapt-las manualmente.

Executando a macro rapidamente


tedioso executar repetidamente a macro usando Ferramentas Macros Executar macro (ver Figura 4). A macro pode ser executada a partir do IDE. Use Ferramentas Macros Organizar macros LibreOffice Basic para abrir a caixa de dilogo Macros do LibreOffice Basic. Selecione sua macro e clique Editar para abir a macro no IDE. O IDE tem um cone Executar o Basic na barra de ferramentas que executa a primeira macro no IDE. A menos que voc modifique a primeira macro, a macro vazia chamado Main. Modifique a Main de modo que seja lido o que foi mostrado na Listagem 6. Listagem 6: Modificar Main para se chamar CopiaNumParaCol1
Sub Main CopiaNumParaCol1 End Sub

Agora, voc pode executar CopiaNumParaCol1 vrias vezes clicando no cone Executar o Basic na barra de ferramenta do IDE. Isto muito rpido e fcil, especialmente para macros temporrias que sero usadas algumas vezes e depois descartadas.

s vezes o gravador de macro falha


Compreender o funcionamento interno do LibreOffice ajuda a entender como e porqu o gravador de macro frequentemente falha. O infrator primrio est relacionado com o quadro de envio e sua relao com o gravador de macro.

A infraestrutura de envio (dispatch framework)


O propsito da infraestrutura de envio (dispatch framework) prover acesso uniforme a componentes (documentos) para comandos que normalmente correspondem a itens de menu. Eu posso usar Arquivo Salvar do menu, a tecla de atalho Ctrl+S, ou clicar no cone Salvar na barra de ferramentas. Todos estes comandos so traduzidos para o mesmo comando de envio. O quadro de envio tambm pode ser usado para enviar comandos de volta para a IU (Interface do Usurio). Por exemplo, depois de salvar o documento, o comando Salvar Arquivo desativado. Assim que o documento for modificado, o comando Salvar Arquivo ativado. Se observarmos um comando de envio, ele um texto como .uno:InsertObject ou .uno.GoToStartOfLine. O comando enviado para o quadro do documento, e o quadro passa o comando at que um objeto que pode manipular o comando seja encontrado.

Como o gravador de macro usa a estrutura envio


O gravador de macro geralmente grava os envios. O gravador relativamente simples de implementar e os mesmos comandos que so emitidos so gravados para uso posterior. O problema w que nem todos os comandos de envio so completos. Por exemplo, inserir um objeto gera o seguinte cdigo:

s vezes o gravador de macro falha

13

dispatcher.executeDispatch(document, ".uno:InsertObject", "", 0, Array())

No possvel especificar o tipo de objeto para criar ou inserir. Se um objeto inserido de um arquivo, voc no pode especificar qual arquivo a ser inserido. Eu gravei uma macro e usei Ferramentas Opes para abrir e modificar itens de configurao. A macro gerada no pode registrar qualquer modificaes de configurao, na verdade, o cdigo gerado comentado por isso no vai mesmo ser executado.
rem dispatcher.executeDispatch(document, ".uno:OptionsTreeDialog", "", 0, Array())

Se uma caixa de dilogo aberta, o comando para abrir a caixa de dilogo susceptvel de ser gerado. Qualquer trabalho feito dentro do dilogo no gravado normalmente. Exemplos incluem dilogos de organizao de macro, insero de caracteres especiais e tipos semelhantes de dilogos. Outros possveis problemas usando o gravador de macros incluem coisas como a insero de uma frmula, a definio de dados do usurio, configurao de filtros no Calc, aes em formulrios de bancos de dados e exportar um documento para um arquivo criptografo PDF. Voc nunca sabe ao certo o que ir funcionar a menos que voc experimente-o. As aes do dilogo de pesquisa so apropriadamente capturadas, por exemplo.

Outras opes
Quando o gravador de macro no capaz de resolver um problema especfico, a soluo usual escrever o cdigo usando os objetos LibreOffice. Infelizmente, h uma curva de aprendizagem para os objetos. Geralmente melhor comear por exemplos simples e ento diversificar lentamente medida que voc aprende mais. Aprender a ler macros geradas um bom ponto de partida. Se voc gravar macros no Calc e o gravador pode gerar corretamente uma macro, h um suplemento criado por Paolo Mantovani, que converte macros do Calc quando elas so gravadas. O cdigo final manipula objetos LibreOffice ao invs de gerar envios. Isto pode ser muito til para aprender o modelo de objeto. Voc pode baixar o gravador de macros diretamente a partir da pgina Web do Paolo. http://www.paolo-mantovani.org/downloads/DispatchToApiRecorder/

Organizao das macros


No LibreOffice, as macros so agrupadas em mdulos, mdulos so agrupados em bibliotecas e bibliotecas so agrupadas em recipientes de bibliotecas. Uma biblioteca normalmente usada como um agrupamento maior para uma ou outra categoria inteira de macros, ou para um aplicativo inteiro. Mdulos normalmente so divididos em funcionalidades, como interao com o usurio e clculos. Macros individuais so sub-rotinas e funes.

14

Introduo s Macros

Recipiente de bibliotecas Biblioteca 1 Biblioteca 2 Biblioteca 3 Mdulo 1 Mdulo 2 Macro 1

Macro 2

Figura 5: Hierarquia das bibliotecas de macro Um cientista da computao usaria a Figura 6 para descrever precisamente a situao. O texto 1..* significa um ou mais, e 0..*significa zero ou mais. O losango preto significa composto de ou contm.

Um recipiente de biblioteca contm uma ou mais bibliotecas, e cada biblioteca est contida
em um recipiente de biblioteca. Um recipiente de biblioteca contm zero ou mais mdulos, e cada mdulo est contido em uma biblioteca. Um mdulo contm zero ou mais macros, e cada macro est contida em um mdulo.
Biblioteca 1 1..* 1 0..* Mdulo 1 0..* Macro

Recipiente de Biblioteca

Figura 6: Hierarquia da biblioteca de Macro Use Ferramentas Macros Organizar macros LibreOffice Basic para abrir a caixa de dilogo Macros do LibreOffice Basic (ver Figura 7). Todos os recipientes de biblioteca disponveis so mostrados na lista Macros de. Cada documento um recipiente de biblioteca, capaz de conter vrias bibliotecas. O aplicativo em si funciona como dois recipientes de biblioteca: um recipiente para macros distribudas com o LibreOffice chamada Macros do LibreOffice e um recipiente para macros pessoais chamado Minhas macros. Como mostrado na Figura 7, apenas um documento est aberto no momento.

Organizao das macros

15

Figura 7: Recipientes da biblioteca so mostrados esquerda As Macros do LibreOffice so armazenadas com o cdigo de execuo do aplicativo, que podem no ser editveis a menos que voc seja um administrador. Isso bom uma vez que estas macros no devem ser alteradas e voc no deve armazenar suas prprias macros no recipiente do LibreOffice. A menos que suas macros sejam aplicveis a um nico documento e somente para este nico documento, suas macros provavelmente sero armazenadas no recipiente Minhas macros. O recipiente Minhas macros armazenado na sua rea de usurio ou diretrio pessoal. Se uma macro est contida em um documento, ento uma macro gravada tentar trabalhar com aquele documento; principalmente porque ela usa ThisComponent para suas aes. Cada recipiente de bibliotecas contm uma biblioteca chamada Standard. melhor criar suas prprias bibliotecas com nomes significativos do que usar a biblioteca Standard. Nomes significativos no so apenas mais fceis de gerenciar, mas eles tambm podem ser importados para recipientes de outra biblioteca enquanto a biblioteca Standard no pode.

Cuidado

O LibreOffice permite importar bibliotecas para um recipiente de biblioteca, mas no lhe permitir substituir a biblioteca chamada Standard. Portanto, se voc armazenar suas macros na biblioteca Standard, voc no pode import-las para um outro recipiente de biblioteca.

Assim como faz todo sentido dar a suas bibliotecas nomes significativos, prudente usar nomes significativos para seus mdulos. Por padro, o LibreOffice usa nomes como Module1. Sinta-se livre para usar seu prprio nome significativo. Conforme voc cria suas macros, voc deve decidir onde armazen-los. Armazenar uma macro em um documento til se o documento ser compartilhado e voc quiser que a macro seja includa em seu documento. Macros armazenadas no recipiente de bibliotecas chamado Minhas macros, no entanto, so globalmente disponveis para todos os documentos. Macros no esto disponveis at que a biblioteca que os contm seja carregada. As bibliotecas Standard e Template, no entanto, so carregadas automaticamente. A biblioteca carregada exibida de maneira diferente a partir de uma biblioteca que no est carregada. Para carregar a biblioteca e os mdulos que ela contm, d um duplo clique na biblioteca.

16

Introduo s Macros

Onde as macros esto armazenadas?


O LibreOffice armazena dados especficos do usurio em um diretrio sob o diretrio pessoal do usurio. A localizao especifica do sistema operacional. Use Ferramentas Opes LibreOffice Caminhos para ver onde outros dados de configurao esto armazenados. No Windows XP, est em C:\Documents and Settings\<name>\ Application Data. Macros do usurio so armazenadas em LibreOffice\3\user\basic. Cada biblioteca armazenada em seu prprio diretrio fora do diretrio bsico. No importante entender onde as macros so armazenadas para uso casual. Se voc sabe onde elas esto armazenadas, no entanto, voc pode criar um backup, compartilhar suas macros, ou inspecion-las se houver um erro. Use Ferramentas Macros Organizar caixas de dilogo para abrir a caixa de dilogo Organizador de macros do LibreOffice Basic. Outra forma comum para abrir esta caixa de dilogo a utilizao de Ferramentas Macros Organizar macros LibreOffice Basic para abrir a caixa de dilogo Macros do LibreOffice Basic e ento clique no boto Organizador.

Figura 8: A caixa de dilogo Organizador de macros

Importando macros
A caixa de dilogo Organizador de macros do LibreOffice Basic fornece a funcionalidade para criar, excluir e renomear bibliotecas, mdulos e dilogos. Selecione o recipiente de biblioteca para usar e ento clique no boto Importar para importar uma bibliotecas de macro (ver Figura 9).

Nota

Voc no pode importar a biblioteca chamada Standard.

Organizao das macros

17

Dica

No Linux, os arquivos especficos do LibreOffice so armazenados sob o diretrio pessoal do usurio em um diretrio cujo nome inicia com um ponto. Diretrios e arquivos com nomes comeando com um ponto no so mostrados em uma janela de seleo normal. Para abrir o diretrio, navegue para o diretrio pessoal, digite o nome .libreoffice\3 e ento clique Abrir ou pressione Ctrl-H para mostrar pastas e arquivos ocultos e navegar normalmente. Isto ir abrir o diretrio, que no mostrado inicialmente.

Figura 9: Selecione uma macro da biblioteca para importar Navegue at o diretrio que contm a biblioteca a ser importada. Normalmente h dois arquivos para escolher, dialog.xlb e script.xlb. No importa qual dos dois arquivos voc selecione; ambos sero importados. Selecione um arquivo e clique Abrir para continuar.

Figura 10: Escolha as opes de importao da biblioteca Se a biblioteca j existe, ela no ser substituda, a menos que Substituir as bibliotecas existentes esteja marcado. Se Inserir como referncia estiver marcado, a biblioteca referenciada em seu local atual, mas voc no pode editar a biblioteca. Se Inserir como referncia no estiver marcado, no entanto, a biblioteca copiada para o diretrio de macros do usurio.

18

Introduo s Macros

Macros podem ser armazenadas em bibliotecas dentro de documentos LibreOffice. Selecione um documento ao invs de um diretrio no disco (como mostrado na Figura 9) para importar bibliotecas contidas em um documento.

Download de macros para importao


Macros esto disponveis para download. Algumas macros esto contidas em documentos, algumas como arquivos regulares que voc deve selecionar e importar e algumas como texto macro que deve ser copiado e colado no IDE Basic; use Ferramentas Macros Organizar macros LibreOffice Basic para abrir a caixa de dilogo Macros do LibreOffice Basic, escolha a macro para editar, e ento clique Editar para abrir a macro no IDE Basic. Algumas macros esto disponveis como download gratuitos na Internet (ver Tabela 1). Adicionando uma macro existente na pgina 4 descreve como adicionar essas macros sua biblioteca de macros Tabela 1. Lugares para encontrar exemplos de macros Localizao
http://www.ooomacros.org/ http://www.pitonyak.org/oo.php http://www.pitonyak.org/database/ http://development.openoffice.org/ http://www.oooforum.org/ http://user.services.openoffice.org/

Descrio
Coleo de macros empacotadas um pouco antigas agora. Materiais de referncia sobre macros. Materiais de referncia sobre macros de banco de dados. Coleo de links para tudo. Um frum, com muitos exemplos e ajuda. Outro frum, com muitos exemplos e ajuda.

Como executar uma macro


Um mtodo tpico para executar uma macro a seguinte: 1) Use Ferramentas Macros Executar macro para abir a caixa de dilogo Seletor de macro (ver Figura 11). 2) Selecione a biblioteca e o mdulo na lista Biblioteca (do lado esquerdo) 3) Selecione a macro na lista Nome da macro (do lado direito) 4) Clique Executar para executar a macro.

Como executar uma macro

19

Figura 11: Usar a caixa de dilogo Seletor de macro para executar macros Embora voc possa usar Ferramentas Macros Executar macro para executar todas as macros, isto no eficiente para macros frequentemente executadas. A tcnica mais comum atribuir a macro a um boto na barra de ferramentas, item de menu, tecla de atalho, ou um boto incorporado em um documento. Ao escolher um mtodo, tambm bom fazer perguntas tais como:

A macro est disponvel apenas para um documento ou globalmente para todos os Com que frequncia a macro vai ser usada?
documentos? A macro pertence a um tipo de documento especfico, como um documento do Calc?

As respostas vo determinar onde armazenar a macro e como torn-la disponvel. Por exemplo, voc provavelmente no ir adicionar uma macro raramente utilizada a uma barra de ferramentas. Para ajudar a determinar suas escolhas, veja a Tabela 2. Tabela 2. Mtodos para iniciar uma macro Tipo
Barra de ferramentas Menu Atalho Evento

LibreOffice
No No Sim Sim

Tipo de documento
Sim Sim Sim No

Documento
Sim Sim No Sim

Para adicionar um item de menu, tecla de atalho, ou cone na barra de ferramentas que chame uma macro, use a caixa de dilogo Personalizar (ver Figura 13). Abra esta caixa de dilogo usando qualquer um dos seguintes mtodos:

Escolha Ferramentas Personalizar da barra de menu principal. Cada barra de ferramentas tem um cone
Personalizar barra de ferramentas. que abre um menu; escolha a opo

20

Introduo s Macros

Dica

A cobertura completa da caixa de dilogo Personalizar est alm do escopo deste documento. Clique no boto Ajuda para acessar a pgina de ajuda que acompanha o LibreOffice.

A caixa de dilogo Personalizar contm abas para configurar menus, atalhos de teclado, barra de ferramentas, e eventos.

Item de Menu
Use Ferramentas Personalizar para abrir a caixa de dilogo Personalizar, e selecione a aba Menus. Voc pode modificar um menu existente ou criar novos menus que chamam macros. Para mais informaes sobre menus modificados, consulte o Captulo 14.

Teclas de atalho
Use Ferramentas Personalizar para abrir a caixa de dilogo Personalizar, e selecione a aba Teclado. A atribuio de atalhos de teclado discutida no Captulo 14.

Figura 12: Caixa de dilogo Personalizar do LibreOffice

Barra de ferramentas
Macros podem ser adicionadas s barras de ferramentas. Para mais informaes sobre como modificar barras de ferramentas, consulte o Captulo 14, Personalizando o LibreOffice.

Como executar uma macro

21

Eventos
No LibreOffice, quando algo acontece, dizemos que ocorreu um evento. Por exemplo, um documento foi aberto, uma tecla foi pressionada ou o mouse foi movido. O LibreOffice permite que eventos causem um chamado de macro; a macro ento chamada por um processador de eventos. A cobertura total sobre o processador de eventos est alm do escopo deste documento, mas um pouco de conhecimento pode ajudar muito.
Tenha cuidado quando voc configura um processador de eventos. Por exemplo, suponha que voc escreve um processador de evento que chamado a cada vez que uma tecla pressionada, mas voc cometeu um erro, de modo que o evento no tratado corretamente. Um resultado possvel que seu processador de evento consumir todas as teclas pressionadas, forando voc a finalizar fora o LibreOffice.

Cuidado

Use Ferramentas Personalizar para abrir a caixa de dilogo Personalizar, e selecione a aba Eventos (ver Figura 13). Os eventos na caixa de dilogo Personalizar esto relacionados com a aplicao completa e documentos especficos. Use a caixa Salvar em para escolher LibreOffice, ou um documento especfico.

Figura 13: Atribuir macro a um evento de nvel de aplicativo Um uso comum atribuir o evento Ao criar um novo documento para chamar uma macro especfica. A macro ento executa certas tarefas de configurao para o documento. Selecione o evento desejado e clique no boto Macro para abrir a caixa de dilogo Seletor de macro (ver Figura 14).
22 Introduo s Macros

Figura 14: Atribuir macro ao evento documento aberto Selecione a macro desejada e clique OK para atribuir a macro ao evento. A aba Eventos mostra que o evento foi atribudo para a macro (ver Figura 15). Quando um documento criado, a macro DigiteMeuNome executada. Muitos objetos em um documento podem ser definidos para chamar macros quando ocorrem eventos. O uso mais comum adicionar um controle, como um boto, em um documento. Mesmo um duplo clique sobre um grfico abre a caixa de dilogo com uma aba de Macros, que permite atribuir uma macro a um evento.

Figura 15: Macro DigiteMeuNome atribuda ao evento Ao criar um novo documento

Extenses
Uma extenso um pacote que pode ser instalado no LibreOffice para adicionar novas funcionalidades. Extenses podem ser escritas em praticamente qualquer linguagem de programao e podem ser simples ou sofisticadas. Extenses podem ser agrupadas em tipos:

Suplementos Calc, que oferecem novas funcionalidades para o Calc, incluindo novas
funes que agem como funes internas normais. Novos componentes e funcionalidades, que normalmente incluem algum nvel de integrao com a interface do usurio, tais como novos menus e barras de ferramentas. Dados pilotos que so usados diretamente no Calc.

Suplementos grficos com novos tipos de grficos. Componentes de lingustica, como um corretor ortogrfico. Modelos de documentos e imagens.

Embora extenses individuais podem ser encontradas em diferentes lugares, existe atualmente um repositrio de extenses em http://extensions2.libreoffice.org/ e alguma documentao em http://libreplanet.org/wiki/Group:OpenOfficeExtensions/List. Para mais informaes sobre como obter e instalar extenses, consulte o Captulo 14, Personalizando o LibreOffice.

Extenses

23

Escrevendo macros sem o gravador


Os exemplos abordados neste captulo so criados usando o gravador de macros e o dispatcher. Voc tambm pode escrever macros que acessem diretamente os objetos que compem o LibreOffice. Em outras palavras, voc pode manipular diretamente um documento. Manipular diretamente os objetos internos do LibreOffice um tpico avanado que est alm do escopo deste captulo. Um exemplo simples, no entanto, demonstra como isso funciona. Listagem 7: Acrescentar o texto Al para o documento atual.
Sub AdicionaOla Dim oDoc Dim sTextService$ Dim oCurs REM Este componente refere-se ao documento ativo no momento. oDoc = ThisComponent REM Verifica se este um documento de texto. sTextService = "com.sun.star.text.TextDocument" If NOT oDoc.supportsService(sTextService) Then MsgBox "Esta marco somente funciona com documentos de texto" Exit Sub End If REM Obter o cursor visto a partir do controle atual. oCurs = oDoc.currentController.getViewCursor() REM Move o cursor para o final do documento. oCurs.gotoEnd(False) REM Insere o texto Ola no final do documento. oCurs.Text.insertString(oCurs, "Ol", False) End Sub

Encontrando mais informaes


Inmeros recursos esto disponveis que fornecem ajuda com macros escritas. Use Ajuda Ajuda do LibreOffice para abrir a pgina de ajuda do LibreOffice. O canto superior esquerdo do sistema de ajuda do LibreOffice contm uma lista suspensa que determina que texto de ajuda mostrado. Para exibir a ajuda para o Basic, escolha LibreOffice Basic nesta lista.

Material includo
Muitas excelentes macros so includas com o LibreOffice. Use Ferramentas Macros Organizar macros LibreOffice Basic para abrir a caixa de dilogo Macros do LibreOffice Basic. Expanda a biblioteca Tools no recipiente de biblioteca LibreOffice. Explore o mdulo Debug alguns bons exemplos incluem o WritedbgInfo(documento) e o printdbgInfo(planilha).

Recursos Online
Os links e referncias a seguir contm informaes sobre a programao de macros: http://user.services.openoffice.org/ (fruns do Ooo, com bom suporte; os voluntrios respondem questes sobre o LibreOffice tambm).

24

Introduo s Macros

http://api.openoffice.org/docs/common/ref/com/sun/star/module-ix.html (IDL oficial de referncia; aqui voc encontrar praticamente todos os comandos com uma descrio). http://wiki.services.openoffice.org/wiki/Documentation/BASIC_Guide (Guia de Programao Basic Oficial do OpenOffice.org) Tambm disponvel em formato ODT em http://wiki.documentfoundation.org/Documentation#Other_Documentation_and_Resources http://wiki.services.openoffice.org/wiki/Documentation/DevGuide (Guia de Desenvolvimento Oficial do OpenOffice.org; contm uma explicao detalhada). Tambm disponvel em formato ODT em http://wiki.documentfoundation.org/Documentation#Other_Documentation_and_Resources http://www.pitonyak.org/oo.php (Pgina Andrew Pitonyak de macros) http://www.pitonyak.org/AndrewMacro.odt (numerosos exemplos de macros de trabalho). http://www.pitonyak.org/OOME_3_0.odt (Livro de Andrew Pitonyak sobre macros) http://www.pitonyak.org/database/ (numerosos exemplos de macro usando o Base). http://docs.sun.com/app/docs/doc/819-0439 (Livro da Sun sobre programao de macro, muito bem escrito e apresentado; O Guia de Programao BASIC do Ooo e o Guia de Desenvolvimento do Ooo so derivados deste livro).

Materiais impressos e livros eletrnicos


Atualmente no h livros especficos para macros do LibreOffice que esto disponveis para download. Para o OpenOffice.org, os seguintes livros esto disponveis para compra na forma impressa e eletrnica de seus editores. Dr. Mark Alexander Bains Learn OpenOffice.org Spreadsheet Macro Programming. Ver http://www.packtpub.com/openoffice-ooobasic-calc-automation/book. Roberto Benitez's Database Programming with OpenOffice.org Base & Basic. Ver http://www.lulu.com/product/paperback/database-programming-with-openofficeorg-basebasic/3568728

Encontrando mais informaes

25

Você também pode gostar