Guia de Introdução 7.0
Capítulo 13
Introdução a Macros
Usar o Gravador de macro… e mais
Este documento é Copyright ©2021 pela Equipe de Documentação do LibreOffice. Os contribuintes estão listados abaixo: Você pode distribuí-lo e / ou modificá-lo sob os termos da GNU General Public License ( http://www.gnu.org/licenses/gpl.html ), versão 3 ou posterior, ou a Creative Commons Attribution License ( http://creativecommons.org/licenses/by/4.0/ ), versão 4.0 ou posterior.
Todas as marcas comerciais dentro desse guia pertencem aos seus respectivos donos.
Este livro foi adaptado e atualizado a partir do Guia de Introdução do LibreOffice 6.4
Jean Hollis Weber |
Kees Kriek |
Peter Schofield |
Dave Barton |
Felipe Viggiano |
Rafael Lima |
Colleen Hayes |
Rob Westein |
Winston Min Tjong |
Leo Moons |
|
|
Andrew Jensen |
Amanda Labby |
Cathy Crumbley |
Dan Lewis |
Dave Barton |
Jean Hollis Weber |
Jorge Rodriguez |
Olivier Hallot |
Paul Figueiredo |
Peter Schofield |
John A Smith |
Martin Saffron |
Steve Schwettman |
Dave Barton |
Hazel Russman |
Ron Faile Jr. |
Kevin O’Brien |
Magnus Adielsson |
Iain Roberts |
JiHui Choi |
Regina Henschel |
Laurent Balland-Poirier |
Christian Kühl |
Florian Reisinger |
Gisbert Friege (Dmaths) |
Jochen Schiffers |
Frédéric Parrenin |
Bernard Siaud |
Miklos Vajna |
Valerii Goncharuk |
Andrew Pitonyak |
Claire Wood |
Pulkit Krishna |
Roman Kuznetsov |
Steve Fanning |
|
Raul Pacheco da Silva |
Olivier Hallot |
Felipe Viggiano |
Vera Cavalcante |
Túlio Macedo |
Chrystina Pelizer |
Flávio Schefer |
Timothy Brennan Jr. |
Jackson Cavalcanti Jr. |
Encaminhe quaisquer comentários ou sugestões sobre este documento para a lista de correio da Equipe de Documentação: docs@pt-br.libreoffice.org
Nota
Tudo o que é enviado para uma lista de correio, incluindo seu endereço de e-mail e qualquer outra informação pessoal escrita na mensagem, é arquivado publicamente e não pode ser excluído.
Publicado em Abril de 2021. Baseado no LibreOffice 7.0.
Uma macro é uma sequência de comandos salvos ou teclas digitadas que são armazenadas para uso posterior. Um exemplo de uma simples macro é aquela que “digita” seu endereço. A linguagem macro do LibreOffice é muito flexível, permitindo a automação de tarefas simples e complexas. Macros são muito úteis quando você tem que repetir uma mesma tarefa da mesma maneira repetidamente.
As macros LibreOffice são geralmente escritas numa linguagem chamada LibreOffice Basic, algumas vezes abreviada para Basic. Embora você possa aprender Basic e escrever macros, há uma curva de aprendizagem para escrever macros do zero. Os métodos usuais para um iniciante são o uso de macros que alguém tenha escrito ou usar o gravador de macro, que registra as teclas digitadas e as salva para uso.
A maioria das tarefas no LibreOffice são realizadas por “disparo de comando” (execução de um comando), que é interceptado e executado. O gravador de macro funciona através da gravação dos comandos que são executados (veja "Ambiente de execução").
Macros mais poderosas no LibreOffice são criadas escrevendo código usando uma das quatro linguagens de script suportadas (LibreOffice Basic, BeanShell, JavaScript e Python). Este capítulo fornece uma visão geral dos recursos das macro do LibreOffice, mais focado na linguagem de script padrão, o LibreOffice Basic. Alguns exemplos estão incluídos para as linguagens de script BeanShell, JavaScript e Python. Contudo, uma discussão aprofundada sobre como usar essas linguagens para scripts estão além do escopo deste capítulo.
O primeiro passo para aprender a programação macro é encontrar e utilizar as macros existentes. Esta seção assume que você tem uma macro que deseja usar, que pode ser num e-mail, numa página web, ou mesmo num livro. Para este exemplo, a macro na Listagem 1 é utilizada. Você deve criar uma biblioteca e um módulo para conter a sua macro; veja "Organização das macros" para mais informações.
Listagem 1: Macro simples que diz Olá
Sub OlaMacro
Print "Olá"
End Sub
Use os seguintes passos para criar uma biblioteca para guardar a sua macro:
Abra qualquer módulo do LibreOffice.
Utilize Ferramentas > Macros > Organizar Macros > Basic para abrir a caixa de diálogo Macros do LibreOffice Basic(Figura 1).
Clique em Organizador para abrir a caixa de diálogo Organizador de macros do LibreOffice Basic (Figura 2) e selecione a guia Bibliotecas.
Figura 1: Caixa de diálogo Macros do LibreOffice Basic
Figura 2: Caixa de diálogo Organizador de macros BASIC do LibreOffice, Guia Bibliotecas
Defina o Local para Minhas macros e caixas de diálogo, que será o local padrão.
Clique Novo para abrir a caixa de diálogo Nova biblioteca.
Insira um nome para a biblioteca, por exemplo TesteBiblioteca, e clique em OK.
Selecione a aba Modulo.
Figura 3: Caixa de diálogo Organizador de macros BASIC, aba Módulos
Na lista Modulo, expanda Minhas macros e selecione, por exemplo TesteBiblioteca. Um módulo com o nome Module1 já existe e pode conter a sua macro. Se desejar, você pode clicar Novo para criar outro módulo na biblioteca.
Selecione Module1, ou o módulo que foi criado no item anterior, então clique o botão Editar para abrir o Ambiente integrado de desenvolvimento - Integrated Debugging Environment (IDE) (Figura 4). O IDE é um editor de texto incluído no LibreOffice que permite criar e editar macros.
Figura 4: módulo de Ambiente Integrado de Desenvolvimento
Quando um novo módulo é criado, é gerado um esqueleto de macro que inicia com um comentário e uma macro sem conteúdo denominada Main, a qual não faz nada.
Adicione a nova macro antes de Sub Main ou após End Sub. A Listagem 2 mostra a inclusão da nova macro antes de Sub Main.
Clique o ícone Compilar na barra de ferramenta para compilar a macro
Coloque o cursor na sub-rotina OlaMacro e clique o ícone Executar o BASIC na barra de ferramentas, ou pressione a tecla F5, para executar a sub-rotina OlaMacro no módulo. Uma pequena caixa de diálogo abre mostrando a frase “Olá”. Se o cursor não está posicionado numa sub-rotina ou função, uma caixa de diálogo abrirá para que seja selecionada a macro que se deseja executar.
Figura 5: Macro Olá
Clique OK para fechar esta pequena caixa de diálogo.
Para selecionar e executar qualquer macro do módulo, clique o ícone Selecionar macro na barra de ferramenta padrão ou utilize o menu Ferramentas > Macros > Organizar macros > LibreOffice Basic.
Selecione a macro e então clique em Executar.
Listagem 2: O Module1 após adicionada a nova macro
REM ***** BASIC *****
Sub OlaMacro
Print "Olá"
End Sub
Sub Main
End Sub
Quando uma macro é gravada no LibreOffice, na verdade se está gravando as etapas para realizar uma certa tarefa usando linguagem de programação. Por exemplo, considere que se queira inserir repetidamente as mesmas informações dentro de um documento. É possível copiar essas informações depois de inseridas em um documento pela primeira vez e, em seguida, colar as informações em um documento cada vez que você quiser usá-las. No entanto, se algo mais for copiado para a área de transferência, o conteúdo da área de transferência é alterado. Isso significa que você deve copiar novamente este pedaço de informação para depois colá-la em um documento. Para superar esse problema, É possível criar uma macro que insira este pedaço de informação sem ter que copiá-lo sempre que precisar.
Nota
Para alguns tipos de informações que se deseja inserir num documento de forma repetida, pode ser mais conveniente criar um arquivo Autotexto. Consulte o Guia do Writer, Capítulo 3, Trabalhar com texto para mais informações.
Certifique-se que a gravação de macros está habilitada indo em Ferramentas > Opções > LibreOffice > Avançado na barra de menu principal e selecione a opção Ativar gravação de macros. Por padrão, esta funcionalidade é desligada na instalação do LibreOffice.
Vá em Ferramentas > Macros > Gravar macro na barra de menu principal para iniciar a gravação de uma macro. Uma pequena caixa de diálogo é exibida indicando que o LibreOffice está gravando uma macro.
Digite a informação desejada ou execute o conjunto de operações apropriadas. Como exemplo, digite seu nome.
Clique Parar Gravação na pequena caixa de diálogo para interromper a gravação e abrir a caixa de diálogo do LibreOffice Basic (Figura 1).
Encontre a biblioteca com o nome Standard em Minhas macros. Note que todos recipientes de bibliotecas possuem uma biblioteca denominada Standard.
Selecione a biblioteca Standard e clique em Novo módulo para um novo módulo ser criado que armazene a macro. Isto abre a caixa de diálogo Novo módulo.
Digite um nome descritivo para o novo módulo, por exemplo Gravado e clique em OK para criar o módulo. A caixa de diálogo do LibreOffice Basic Macros mostra o nome do novo módulo na biblioteca Standard.
Na caixa de texto Nome da macro, digite um nome para a macro que acabou de gravar, por exemplo EscrevaMeuNome.
Clique Salvar para armazenar a macro e fechar a caixa de diálogo de Macros do LibreOffice.
Se foi seguido todos os passos acima, a biblioteca Standard agora contém um módulo Gravado e neste módulo a macro EscrevaMeuNome.
Nota
Sempre que se cria um novo módulo no LibreOffice, uma sub-rotina chamada Main é adicionada automaticamente ao módulo.
Vá em Ferramentas > Macros > Executar macro... para abrir a caixa de diálogo Seletor de macro (Figura 6).
Por exemplo, selecione a macro recém-criada e clique em Executar.
Alternativamente, acesse o menu Ferramentas > Macros > Organizar Macros > LibreOffice Basic para abrir a caixa de diálogo de Macros do LibreOffice Basic, selecione a macro e clique Executar.
Figura 6: Caixa de diálogo Seletor de Macro
Para visualizar e editar a macro que acabou de ser criada:
Use Ferramentas > Macros > Organizar macros > LibreOffice Basic para abrir a caixa de diálogo Macros do LibreOffice Basic.
Selecione a sua macro e clique Editar para abrir a macro na IDE. A macro EscrevaMeuNome é mostrada na Listagem 3.
A macro EscrevaMeuNome não é tão complicada como parece à primeira vista. Aprender algumas coisas ajuda significativamente na compreensão da macro. A discussão começa com as características no topo da macro, com suas descrições.
Listagem 3: Geração da macro “EscrevaMeuNome”.
REM ***** BASIC *****
Sub Main
End Sub
sub EscrevaMeuNome
rem -------------------------------------------------------------
rem definir as variáveis
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 = "Seu nome"
dispatcher.executeDispatch(document, ".uno:InsertText", "", 0, args1())
end sub
Todos os comentários no código da macro iniciam com a palavra-chave REM (do inglês Remark). Todo texto depois da palavra REM, na mesma linha, é ignorado. Também pode ser utilizado o carácter aspa simples (') para iniciar um comentário.
LibreOffice Basic não é sensível a textos maiúsculos e minúsculos, então REM, Rem, e rem podem ser utilizados para iniciar um comentário. Se forem definidas constantes simbólicas pela interface de programação (API do inglês Aplication Programming Interface), os códigos passam a assumir que os nomes são sensíveis a caixa das letras. Constantes simbólicas é um tópico avançado não coberto por este guia, pois não são utilizadas nas macros gravadas no LibreOffice.
Macros individuais são armazenadas em sub-rotinas que devem iniciar com a palavra-chave SUB. A sub-rotina é finalizada quando encontra as palavras END SUB. O código inicia definindo o nome da sub-rotina com Main (do inglês principal), a qual é vazia e não faz nada. A próxima sub-rotina, EscrevaMeuNome, contém o código gerado pela macro que foi gravada.
Nota
O LibreOffice sempre cria uma sub-rotina denominada Main quando cria um módulo novo.
Existem tópicos avançados que estão além do escopo deste guia, mas aqui pode-se ter uma noção de algumas áreas de interesse:
Pode-se escrever macros que podem passar valores para a sub-rotina. Os valores são chamados de argumentos. Entretanto, macros gravadas pelo LibreOffice não aceitam argumentos.
Um outro tipo de sub-rotina é chamada de função, estas podem retornar um valor. Funções são definidas pela palavra-chave FUNCTION no seu início. Entretanto, macros gravadas pelo LibreOffice nunca criam funções, sempre sub-rotinas.
Você pode escrever uma informação num pedaço de papel para o caso de querer consultar depois. Uma variável, como um pedaço de papel, contém informação que pode ser mudada e lida. A palavra-chave DIM originalmente significava Dimensão e foi utilizada para definir a dimensão de uma matriz (array). A instrução DIM utilizada na macro EscrevaMeuNome é semelhante a usar um pedaço de papel para armazenar uma mensagem ou nota.
Na macro EscrevaMeuNome, as variáveis document e dispatcher são definidas como do tipo object (objeto). Outros tipos comuns de varáveis são string (texto), integer (inteiro), e date (data). A terceira variável, com o nome args1, é uma matriz (array) de valores de propriedade (PropertyValue). As variáveis do tipo array permitem que uma simples variável possa conter valores múltiplos, como armazenar várias páginas num livro. Valores num array são normalmente numerados, começando pelo zero. O número dentro dos parênteses indica o maior número utilizável para acessar a localização do conteúdo armazenado. Neste exemplo, existe somente um valor, que está com valor zero.
A seguir é explicado cada passo do código utilizado na macro EscrevaMeuNome. Pode ser que nem todos os detalhes sejam entendidos, mas a explicação de cada linha do código pode dar alguma ideia de como trabalha a macro.
sub EscrevaMeuNome
dim document as object
dim dispatcher as object
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "Text"
args1(0).Value = "Seu nome"
dispatcher.executeDispatch(document, ".uno:InsertText", "", 0, args1())
end sub
Ao criar uma macro é importante fazer dois questionamentos antes de gravar:
As tarefas podem ser escritas como um simples conjunto de comandos?
Os passos podem serem organizados de forma que o último comando deixe o cursor pronto para o próximo comando ou a entrada de texto ou dados no documento?
Uma tarefa mais comum é copiar linhas e colunas de dados de uma página da web e formatá-las como uma tabela num documento texto como a seguir:
Copiar os dados de uma página da web para a área de transferência.
Para limpar as informações de formatações e fontes do local de origem, cole o texto no documento Writer como texto sem formatação.
Refaça a formatação do texto com tabulações entre as colunas, então poderá ser convertido em tabela utilizando Tabela > Converter > De texto para tabela na barra de menu principal.
Com as duas questões acima em mente, pode-se verificar se a formatação do texto pode ser gravada como uma macro. O exemplo dos dados copiados mostra o grupo de constantes FontWeight do web site da API (Figura 7). A primeira coluna neste exemplo indica o nome da constante e cada nome é acompanhado por um espaço e uma tabulação, e cada linha tem dois espaços a direita.
A primeira coluna na tabela deve conter um valor numérico, a segunda coluna o nome e a terceira coluna a descrição. Esta conversão pode ser realizada facilmente em todas linhas, exceto para os valores DONTKNOW e NORMAL, que não contêm um valor numérico, mas os valores estão entre 0 e 100 e podem ser inseridos manualmente.
Figura 7: Exemplo de dados copiados
DONTKNOW |
A espessura da fontes não é conhecida/especificada. |
THIN |
especifica uma espessura de fonte de 50% |
ULTRALIGHT |
especifica uma espessura de fonte de 60% |
LIGHT |
especifica uma espessura de fonte de 75% |
SEMILIGHT |
especifica uma espessura de fonte de 90% |
NORMAL |
especifica uma espessura de fonte normal |
SEMIBOLD |
especifica uma espessura de fonte de 110% |
BOLD |
especifica uma espessura de fonte de 150% |
ULTRABOLD |
especifica uma espessura de fonte de 175% |
BLACK |
especifica uma espessura de fonte de 200% |
Os dados podem ser limpos de diversas formas, todos fáceis de realizar. O exemplo dado abaixo utiliza teclas combinadas, e assume que o cursor inicialmente está na linha com o texto THIN.
Certifique-se que a gravação de macros está habilitada indo em Ferramentas > Opções > LibreOffice > Avançada na barra de menu principal e selecione a opção Ativar gravação de macros. Por padrão, esta funcionalidade é desligada na instalação do LibreOffice.
Vá em Ferramentas > Macros > Gravar macros na barra de menu principal para iniciar a gravação.
Pressione Ctrl+Seta direita para movimentar o cursor para o início da palavra “especifica”.
Pressione Backspace duas vezes para remover a tabulação e o espaço.
Pressione Tab para adicionar a tabulação sem espaço depois do nome da constante.
Pressione Delete para remover a letra minúscula "e" e então pressione Shift+E para incluir um “E” maiúsculo.
Pressione Ctrl+Seta Direita duas vezes para mover o cursor para o início do número.
Pressione Ctrl+Shift+Seta Direita para selecionar e mover o cursor antes do sinal “%”.
Pressione Ctrl+C para copiar o texto selecionado para a área de transferência.
Pressione End para mover o cursor para o fim da linha.
Pressione Backspace duas vezes para remover os dois espaços da direita.
Pressione Home para mover o cursor para o início da linha.
Pressione Ctrl+V para colar o número selecionado para o início da linha.
Colado o valor com espaço extra, então pressione Backspace para remover o espaço extra.
Pressione Tab para inserir uma tabulação entre o número e o nome.
Pressione Home para mover para o início da linha.
Pressione a seta para baixo para mover para a próxima linha.
Pare a gravação da macro e salve a macro, se necessário veja “Gravar uma macro” acima.
Leva muito mais tempo para ler e escrever os passos do que para gravar a macro. Trabalhe devagar e pense sobre os passos a fazer. Com a prática, isso se tornará natural.
O código gerado de macro na Listagem 4 foi modificado para conter o número do passo nos comentários para coincidir com o código para o passo acima.
Listagem 4: Copiar um valor numérico para o início da coluna
sub CopiaNumParaCol1
rem -------------------------------------------------------------
rem definir as variáveis
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 (3) Pressione Ctrl+Seta direita para mover para o início da palavra “especifica”.
dispatcher.executeDispatch(document, ".uno:GoToNextWord", "", 0, Array())
rem (4) Pressione Backspace duas vezes para remover a tabulação e o espaço.
dispatcher.executeDispatch(document, ".uno:SwBackspace", "", 0, Array())
rem -------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:SwBackspace", "", 0, Array())
rem (5) Pressione TAB para adicionar a tabulação sem espaço 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())
rem (6) Pressione Delete para remover a letra “e” minúscula ...
dispatcher.executeDispatch(document, ".uno:Delete", "", 0, Array())
rem (6) ... e então pressione Shift+E para incluir um “E” maiúsculo.
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 (7) Pressione Ctrl+Seta Direita duas vezes para mover o cursor para o início do número.
dispatcher.executeDispatch(document, ".uno:GoToNextWord", "", 0, Array())
rem -------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:GoToNextWord", "", 0, Array())
rem (8) Pressione Ctrl+Shift+Seta Direita para selecionar o número.
dispatcher.executeDispatch(document, ".uno:WordRightSel", "", 0, Array())
rem (9) Pressione Ctrl+C para copiar o texto selecionado para a área de transferência.
dispatcher.executeDispatch(document, ".uno:Copy", "", 0, Array())
rem (10) Pressione End para mover o cursor para o fim da linha.
dispatcher.executeDispatch(document, ".uno:GoToEndOfLine", "", 0, Array())
rem (11) Pressione Backspace duas vezes para remover os dois espaços da direita.
dispatcher.executeDispatch(document, ".uno:SwBackspace", "", 0, Array())
rem -------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:SwBackspace", "", 0, Array())
rem (12) Pressione Home para mover o cursor para o início da linha.
dispatcher.executeDispatch(document, ".uno:GoToStartOfLine", "", 0, Array())
rem (13) Pressione Ctrl+V para colar o número selecionado para o início da linha.
dispatcher.executeDispatch(document, ".uno:Paste", "", 0, Array())
rem (14) pressione Backspace para remover o espaço extra.
dispatcher.executeDispatch(document, ".uno:SwBackspace", "", 0, Array())
rem (15) Pressione Tab para inserir uma tabulação entre o número 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 (16) Pressione Home para mover para o início da linha.
dispatcher.executeDispatch(document, ".uno:GoToStartOfLine", "", 0, Array())
rem (17) Pressione a seta para baixo para mover para a próxima 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
dispatcher.executeDispatch(document, ".uno:GoDown", "", 0, args19())
end sub
Os movimentos do cursor são utilizados em todas as operações (para substituir a pesquisa no arquivo). Se executar na linha DONTKNOW, a palavra “espessura” é movimentada para o início da linha, e a palavra “O” passa a ser “E”. Isto não está correto, pois não devia ter executado a macro nas linhas com a estrutura errada. Isto deve ser feito manualmente.
É tedioso executar repetidamente a macro usando Ferramentas > Macros > Executar Macro na barra de menu principal quando a macro pode ser executada a partir do IDE (Figura 5 acima). Se for necessário executar frequentemente uma determinada macro, é possível atribuir um atalho de teclado para executá-la rapidamente. A seguir estão as etapas para atribuir o atalho Ctrl + K para a macro CopiaNumParaCol1.
Vá para Ferramentas> Personalizar. Isso abrirá a caixa de diálogo Personalizar.
Selecione a aba Teclado. Na seção Teclas de atalho, selecione o atalho Ctrl + K.
Na seção Categoria, selecione Macros do LibreOffice. Navegue nesta seção e selecione a macro CopiaNumParaCol1.
Agora clique no botão Modificar para atribuir o atalho Ctrl + K para a macro CopiaNumParaCol1.
Clique em OK para fechar a caixa de diálogo Personalizar.
Agora você pode executar a macro CopiaNumParaCol1 usando o atalho Ctrl + K . Isso é muito rápido e fácil para configurar depois de se acostumar com o fluxo de trabalho da macro.
Listagem 5: Sub-rotina Main alterada para chamar CopiaNumParaCol1
Sub Main
CopiaNumParaCol1
End Sub
Algumas vezes há falha no gravador de macro e entender o funcionamento interno do LibreOffice ajuda a entender como e por que ocorre a falha. A principal causa dessas limitações é a estrutura de despacho e sua relação com o gravador de macro.
O objetivo do ambiente de execução é fornecer acesso uniforme aos componentes (documentos) para comandos que normalmente correspondem a itens do menu. Usar Arquivo > Salvar na barra de menu principal, as teclas de atalho Ctrl+S, ou clicar no ícone Salvar são todos de comandos que são traduzidos para o mesmo "comando de execução".
A estrutura de despacho também pode ser usada para enviar “comandos” de volta para interface de usuário (UI, user interface, do inglês). Por exemplo, após salvar um novo documento, a lista de arquivos recentes é atualizada.
Um comando de envio é um texto, por exemplo .uno: InsertObject ou .uno: GoToStartOfLine . O comando é enviado para estrutura do documento e este passa o comando até que seja encontrado um objeto que possa manipular o comando.
O gravador de macro registra os comandos enviados. O gravador é relativamente simples de usar e os mesmos comandos que são enviados são gravados para uso posterior. O problema é que nem todos os comandos enviados estão completos. Por exemplo, inserir um objeto gera o seguinte código:
dispatcher.executeDispatch(document, ".uno:InsertObject", "", 0, Array())
Com este comando não é possível especificar o tipo de objeto para criar ou inserir. Se um objeto foi inserido de um arquivo, não se pode especificar de qual arquivo inserir.
Caso grave uma macro com o menu Ferramentas > Opções para abrir e modificar itens de configuração, a macro que é gerada não gravará qualquer alteração de configuração. Na verdade, o código gerado estará comentado e não executará nada.
rem dispatcher.executeDispatch(document, ".uno:OptionsTreeDialog", "", 0, Array())
Se uma caixa de diálogo for aberta, é provável que um comando para abrir a caixa de diálogo seja gerado. Qualquer trabalho feito dentro do diálogo não é costumeiramente gravado. Exemplos incluem caixas de diálogos de organização de macro, inserção de caracteres especiais e tipos semelhantes de caixas de diálogos. Outros possíveis problemas usando o gravador de macros incluem coisas como a inserção de uma fórmula, a definição de dados do usuário, configuração de filtros no Calc, ações em formulários de bancos de dados e exportar um documento para um arquivo PDF criptografado. Você nunca sabe ao certo o que funcionará a menos que experimente. Por exemplo, as ações do diálogo de pesquisa são apropriadamente capturadas.
Quando o gravador de macro, não é capaz de resolver um problema específico, a solução usual é escrever o código usando os objetos do LibreOffice. Infelizmente, a curva de aprendizagem é acentuada para os mesmos. Geralmente é melhor começar por exemplos simples e então diversificar lentamente à medida que se aprende mais. Aprender a ler macros geradas é um bom ponto de partida.
Se gravar macros no Calc e o gravador for capaz de gerar corretamente a macro, existe um suplemento disponível que converte macros do Calc quando elas são gravadas. O código final manipula objetos LibreOffice em vez de gerar execuções. Isso pode ser muito útil para aprender o modelo de objeto e pode ser baixado diretamente do site:
http://www.paolo-mantovani.org/downloads/DispatchToApiRecorder/
No LibreOffice, as macros são agrupadas em módulos, os módulos são agrupados em bibliotecas e bibliotecas são 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. Módulos normalmente são divididos em funcionalidades, como interação com o usuário e cálculos. Macros individuais são sub-rotinas e funções. A Figura 8 mostra um exemplo da estrutura hierárquica da biblioteca de macros no LibreOffice.
Acesse o menu Ferramentas > Macros > Organizar Macros > LibreOffice Basic para abrir a caixa de diálogo Macros LibreOffice Basic (Figura 1 acima). Todos os recipientes de biblioteca disponíveis são mostrados na lista Macros de. Cada documento é um recipiente de biblioteca capaz de conter várias bibliotecas. O aplicativo em si funciona como dois recipientes de biblioteca: um recipiente para macros distribuídas com o LibreOffice chamada Macros do LibreOffice e um recipiente para macros pessoais chamadas Minhas macros.
As Macros do LibreOffice são armazenadas com o código de execução do aplicativo, que podem não ser editáveis a menos que você seja um administrador. Isso ajuda a proteger estas macros porque não devem ser alteradas e você não deve armazenar suas próprias macros no recipiente do LibreOffice.
A menos que as macros sejam aplicáveis a um único documento e somente para este único documento, suas macros provavelmente serão armazenadas no recipiente “Minhas macros”. Este recipiente Minhas macros é armazenado na área pessoal do usuário ou diretório do usuário.
Figura 8: Hierarquia de bibliotecas de macros
Se uma macro está contida num documento, a macro gravada tentará trabalhar com aquele documento; principalmente porque ela usa “ThisComponent” para suas ações.
Cada recipiente de bibliotecas contém uma biblioteca chamada Standard. É melhor criar suas próprias bibliotecas com nomes significativos do que usar a biblioteca Standard. Nomes significativos não são apenas mais fáceis de gerenciar, mas eles também podem ser importados para recipientes de outra biblioteca enquanto a biblioteca Standard não pode.
Cuidado
O LibreOffice permite importar bibliotecas para um recipiente de biblioteca, mas não permitirá substituir a biblioteca chamada Standard. Portanto, se você armazenar suas macros na biblioteca Standard, você não 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 módulos. Por padrão, o LibreOffice usa nomes como Module1, Module2, etc.
Conforme for criando as macros, você deve decidir onde armazená-las. Armazenar uma macro num documento é útil se o documento será compartilhado e você quiser que a macro seja incluída em seu documento. Macros armazenadas no recipiente de bibliotecas chamado Minhas macros, no entanto, são globalmente disponíveis para todos os documentos.
Macros não estão disponíveis até que a biblioteca que os contém seja carregada. As bibliotecas Standard e Template, no entanto, são carregadas automaticamente. A biblioteca carregada é exibida de maneira diferente a partir de uma biblioteca que não está carregada. Para carregar a biblioteca e os módulos que ela contém, dê um duplo clique na biblioteca.
O LibreOffice armazena dados específicos de um usuário na sua pasta de usuário. A localização é específica do sistema operacional. Vá em Ferramentas > Opções > LibreOffice > Caminhos para ver onde outros dados de configuração estão armazenados. Por exemplo, em computador executando Windows, está em C:\Usuários\<nome do usuário>\AppData\Roaming\LibreOffice\4\user. As macros do usuário são armazenadas em LibreOffice\4\user\basic. Cada biblioteca é armazenada em seu próprio diretório fora do diretório basic.
Não é importante entender onde as macros são armazenadas para uso temporário. Se souber onde elas estão armazenadas, no entanto, você pode criar uma cópia de reserva, compartilhar suas macros, ou corrigi-las se houver um erro.
Vá em Ferramentas > Macros > Organizar caixas de diálogo na barra de menu principal para abrir a caixa de diálogo Organizador de macros do LibreOffice Basic (Figura 1 acima). Alternativamente, vá em Ferramentas > Macros > Organizar macros > LibreOffice Basic na barra de menu principal para abrir a caixa de diálogo Macros do LibreOffice Basic (Figura 1 acima) e então clique no botão Organizador.
A caixa de diálogo Organizar macros do LibreOffice BASIC permite exportar bibliotecas de macro para serem reutilizadas e compartilhadas com outros usuários. Para exportar uma biblioteca de macros:
Vá em Ferramentas > Macros > Organizar macros > Basic... e clique no botão Organizador.
Clique na guia Bibliotecas guia e escolha qual biblioteca você deseja exportar.
Clique em Exportar e então selecione Exportar como biblioteca BASIC (observe que você não pode exportar a biblioteca Standard).
Escolha onde deseja salvar a biblioteca e clique Salvar.
Ao exportar uma biblioteca, o LibreOffice cria uma pasta contendo todos os arquivos relacionados à biblioteca. A Figura 9 mostra um exemplo de como uma biblioteca chamada BibliotecaTeste com um único módulo chamado Módulo 1 seria exportado.
A caixa de diálogo Organizador de macros do LibreOffice Basic permite a importação de biblioteca de macro para seu documento, assim como criar, excluir e renomear bibliotecas, módulos e diálogos.
Selecione o recipiente de biblioteca para usar e então clique no botão Importar para importar uma biblioteca de macro (Figura 1 acima).
Navegue até o diretório que contém a biblioteca a ser importada (Figura 9). Normalmente há dois arquivos para escolher, dialog.xlb e script.xlb. Não importa qual dos dois arquivos seja selecionado, ambos serão importados. Macros podem ser armazenadas em bibliotecas dentro dos documentos LibreOffice. Selecione um documento, em vez de um diretório do disco, para importar bibliotecas armazenadas nesse documento.
Nota
Você não pode importar a biblioteca chamada Standard.
Figura 9: Navegar para uma Biblioteca de Macros
Dica
Em computadores com o sistema operacional Linux, os arquivos específicos do LibreOffice são armazenados sob o diretório pessoal do usuário num diretório cujo nome inicia com um ponto (geralmente .config). Diretórios e arquivos com nomes começando com um ponto podem estar ocultos e provavelmente não serão mostrados numa janela de seleção normal. Se estiver usando caixas de diálogo do LibreOffice, em vez de caixas de diálogo específicas do sistema operacional, digite o nome do diretório desejado no campo Nome.
Selecione o arquivo e clique Abrir para continuar e abrir a caixa de diálogo Importar bibliotecas (Figura 10).
Figura 10: Escolha as opções de importação de Bibliotecas
Selecione a seguintes opções para importar a biblioteca:
Se nenhuma opção for selecionada, a biblioteca é copiada para o diretório de macro do usuário. No entanto, se a biblioteca que você está importando tem o mesmo nome e está sendo importada para o mesmo local, ela não será copiada.
Selecione Substituir bibliotecas existentes, se a biblioteca que deseja importar tem o mesmo nome e deseja substituir a existente.
Selecione Inserir como referência se desejar utilizar a biblioteca como referência, mas não importar a biblioteca para o documento. Quando a biblioteca é utilizado como referência, ela se mantém no seu local de origem e somente pode ser lida.
Clique OK para importar a biblioteca de macro que foi selecionada.
Macros estão disponíveis para download. Algumas macros estão contidas em documentos, algumas como arquivos comuns que você deve selecionar e importar e algumas como arquivo de texto que deve ser copiado e colado no IDE Basic. Veja em Adicionar uma macro acima como adicionar macros para a sua biblioteca de macros e Visualizar e editar macros acima como editar macros utilizando a IDE Basic.
Algumas macros estão disponíveis para baixar gratuitamente na Internet (veja a Tabela 1).
Tabela 1. Exemplos de macro
Localização |
Descrição |
Materiais de referência sobre macros. |
|
Materiais de referência sobre banco de dados de macros. |
|
Lotes de links para macros |
|
Fóruns, com vários exemplos e ajuda. |
Embora você possa usar Ferramentas> Macros> Executar macro para executar todas as macros, isso não é eficiente para macros frequentemente executadas. Veja "Executar uma macro” acima para mais informação.
A técnica mais comum é atribuir a macro a um botão na barra de ferramentas, item de menu, tecla de atalho, ou um botão incorporado num documento. Ao escolher um método, também é bom fazer perguntas tais como:
A macro deve estar disponível apenas para um documento ou globalmente para todos os documentos?
A macro, pertence a um tipo de documento específico, como um documento do Calc?
Com que frequência a macro vai ser usada?
As respostas vão determinar onde armazenar a macro e como torná-la disponível. Por exemplo, provavelmente não adicionará uma macro raramente utilizada a uma barra de ferramentas. Para ajudar a determinar suas escolhas, veja a Tabela 2.
Tabela 2. Onde armazenar uma macro
Tipos de macro |
LibreOffice (para todos os componentes) |
Um tipo específico de documento |
Um documento |
Barra de ferramentas |
Não |
Sim |
Sim |
Menu |
Não |
Sim |
Sim |
Atalho |
Sim |
Sim |
Não |
Evento |
Sim |
Não |
Sim |
Para adicionar um item de menu, tecla de atalho, ou ícone na barra de ferramentas que chame uma macro, use a caixa de diálogo Personalizar (Figura 11).
Esta caixa de diálogo contém abas para configurar menus, teclas de atalho, barra de ferramenta, e eventos. Para abrir esta caixa de diálogo, vá em Ferramentas > Personalizar da barra de menu principal ou clique com o botão direito do mouse num espaço vazio na barra de ferramenta e selecione a opção Personalizar barra de ferramentas no menu de contexto.
A cobertura completa da caixa de diálogo Personalizar está além do escopo deste documento. Clique no botão Ajuda para acessar a página de ajuda que acompanha o LibreOffice ou consulte o Capítulo 14 - Personalizar o LibreOffice.
Figura 11: Abas Menu na caixa de diálogo Personalizar
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, são todos eventos. O LibreOffice permite que eventos causem um chamado de macro; a macro é então chamada por um manipulador de eventos. A cobertura total sobre o manipulador de eventos está além do escopo deste documento, mas um pouco de conhecimento pode ajudar muito.
Cuidado
Tenha cuidado quando configurar um manipulador de eventos. Por exemplo, suponha que você escreva um manipulador de evento que é chamado a cada vez que uma tecla é pressionada, mas você cometeu um erro, de modo que o evento não é tratado corretamente. Um resultado possível é que seu manipulador de evento consumirá todas as teclas pressionadas, forçando você a finalizar à força o LibreOffice.
Vá em Ferramentas > Personalizar para abrir a caixa de diálogo Personalizar, e selecione a aba Eventos (Figura 12). Os eventos na caixa de diálogo Personalizar estão relacionados com a aplicação completa e documentos específicos.
Em Salvar em, selecione LibreOffice, ou um documento específico a partir da lista suspensa do menu para salvar seu evento.
Um uso comum é atribuir o evento ao criar um documento para chamar uma determinada macro. Então a macro executará certas tarefas de configuração para o documento. Selecione o evento desejado e clique em Macro para abrir o diálogo Seletor de macro (Figura 6 acima).
Selecione a macro que deseja e clique OK para atribuir a macro ao evento. A aba Eventos mostra que o evento foi atribuído para a macro.
Figura 12: Aba Eventos na caixa de diálogo Personalizar
Muitos objetos num documento podem ser definidos para chamar macros quando ocorrem eventos. O uso mais comum é adicionar um controle, como um botão, num documento. Mesmo um duplo clique sobre um gráfico abre a caixa de diálogo com uma aba de Macros, que permite atribuir uma macro a um evento.
Uma extensão é um pacote que pode ser instalado no LibreOffice para adicionar novas funcionalidades. Extensões podem ser escritas em praticamente qualquer linguagem de programação e podem ser simples ou sofisticadas. Extensões podem ser agrupadas em tipos:
Suplementos Calc, que oferecem novas funcionalidades para o Calc, incluindo novas funções que agem como funções internas normais.
Novos componentes e funcionalidades, que normalmente incluem algum nível de integração com a interface do usuário, tais como novos menus e barras de ferramentas.
Dados pilotos que são usados diretamente no Calc.
Suplementos gráficos com novos tipos de gráficos.
Componentes de linguística, como um corretor ortográfico.
Modelos de documentos e imagens.
Embora extensões individuais possam ser encontradas em diferentes lugares, existe atualmente um repositório de extensões em http://extensions.libreoffice.org/ e alguma documentação em http://libreplanet.org/wiki/Group:OpenOfficeExtensions/List.
Para mais informações sobre como obter e instalar extensões, consulte o Capítulo 14 - Personalizar o LibreOffice.
Os exemplos abordados neste capítulo são criados usando o gravador de macros e o dispatcher. Também é possível escrever macros que acessem diretamente os objetos que compõem o LibreOffice se você está confiante em escrever código de computador. Em outras palavras, você pode manipular diretamente um documento.
Manipular diretamente os objetos internos do LibreOffice é um tópico avançado que está além do escopo deste capítulo. A seguir um exemplo simples, no entanto, demonstrando como isso funciona.
Listagem 6: Acrescentar o texto “Olá” para o documento atual.
Sub AppendOla
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 macro so funciona com um documento 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 “Olá” no final do documento.
oCurs.Text.insertString(oCurs, "Olá", False)
End Sub
Muitos programadores podem não estar familiarizados com o LibreOffice Basic e, portanto, o Calc suporta macros escritas em três outras linguagens que podem ser mais familiares. Estes são BeanShell, JavaScript e Python.
A linguagem de script de macro principal para Calc é o LibreOffice Basic e a instalação padrão do LibreOffice fornece um ambiente de desenvolvimento integrado (IDE) poderoso junto com mais opções para esta linguagem.
As macros são organizadas da mesma maneira para todas as quatro linguagens de script. o contêiner Macros do LibreOffice contém todas as macros que são fornecidas na instalação do LibreOffice. O contêiner Minhas Macros recipiente de biblioteca contém suas macros que estão disponíveis para qualquer um de seus documentos do LibreOffice. Cada documento também pode conter macros que não estão disponíveis para nenhum outro documento.
Quando você usa o recurso de gravação de macro, o Calc cria a macro no LibreOffice Basic. Para usar as outras linguagens de script disponíveis, você deve escrever o código sozinho.
Quando selecionar a execução de uma macro usando Ferramentas > Macros > Executar macro na barra de menus, o Calc exibe a caixa de diálogo Seletor de macro. Esta caixa de diálogo permite a seleção e execução de qualquer macro disponível, codificada em qualquer um dos idiomas disponíveis (Figura 13)
Quando selecionar editar uma macro usando Ferramentas> Macros> Editar Macros na barra de menus, o Calc exibe o IDE do LibreOffice Basic. Esta caixa de diálogo permite a seleção e edição de qualquer macro do LibreOffice Basic disponível, mas não de macros em outros idiomas.
O modelo de componente usado no LibreOffice é conhecido como Universal Network Objects ou UNO. Macros do LibreOffice em qualquer linguagem de script usam uma interface de programação de aplicativo (API) de tempo de execução UNO. A interface XSCRIPTCONTEXT é fornecida para scripts de macro em todas as quatro linguagens de programação e fornece um meio de acesso às várias interfaces de que elas podem precisar para executar alguma ação num documento.
Figura 13: Caixa de diálogo do seletor de macro
BeanShell é uma linguagem de script semelhante ao Java, lançada pela primeira vez em 1999.
Ao selecionar Ferramentas > Macros > Organizar Macros > BeanShell na barra de menus, o Calc exibe a caixa de diálogo Macros BeanShell (Figura 14)
Clique no botão Editar na caixa de diálogo Macros BeanShell para acessar a janela de depuração BeanShell (Figura 15)
Figura 14: Caixa de diálogo Macros BeanShell
Figura 15: Janela de depuração BeanShell
Listagem 7 é um exemplo de macro BeanShell que insere o texto “Hello World from BeanShell” na célula A1 da planilha Calc ativa.
Listagem 7. Macro BeanShell de exemplo
import com.sun.star.uno.UnoRuntime;
import com.sun.star.sheet.XSpreadsheetView;
import com.sun.star.text.XText;
model = XSCRIPTCONTEXT.getDocument();
controller = model.getCurrentController();
view = UnoRuntime.queryInterface(XSpreadsheetView.class, controller);
sheet = view.getActiveSheet();
cell = sheet.getCellByPosition(0, 0);
cellText = UnoRuntime.queryInterface(XText.class, cell);
textCursor = cellText.createTextCursor();
cellText.insertString(textCursor, "Hello World from BeanShell", true);
return 0;
JavaScript é uma linguagem de script de alto nível lançada pela primeira vez em 1995.
Quando selecionar Ferramentas > Macros > Organizar Macros > JavaScript na barra de menus, o Calc exibe a caixa de diálogo Macros JavaScript (Figura 16)
Figura 16: Caixa de diálogo JavaScript Macros
Clique no botão Editar na caixa de diálogo Macros JavaScript Macros para acessar o Rhino JavaScript Debugger (Figura 17). Instruções detalhadas para usar esta ferramenta podem ser encontradas no site da Mozilla em https://developer.mozilla.org/en-US/docs/Mozilla/Projects/Rhino/Debugger.
Figura 17: Rhino JavaScript Debugger
A Listagem 8 é um exemplo de macro JavaScript que insere o texto “Hello World do JavaScript” na célula A1 da primeira folha de uma planilha do Calc.
Listagem 8. Macro JavaScript de exemplo
importClass(Packages.com.sun.star.uno.UnoRuntime);
importClass(Packages.com.sun.star.sheet.XSpreadsheetDocument);
importClass(Packages.com.sun.star.container.XIndexAccess);
importClass(Packages.com.sun.star.table.XCellRange);
importClass(Packages.com.sun.star.table.XCell);
documentRef = XSCRIPTCONTEXT.getDocument();
spreadsheetInterface = UnoRuntime.queryInterface(XSpreadsheetDocument, documentRef);
allSheets = UnoRuntime.queryInterface(XIndexAccess, spreadsheetInterface.getSheets());
theSheet = allSheets.getByIndex(0);
Cells = UnoRuntime.queryInterface(XCellRange,theSheet);
cellA1 = Cells.getCellByPosition(0,0);
theCell = UnoRuntime.queryInterface(XCell,cellA1);
theCell.setFormula("Hello World from JavaScript");
O Python é uma linguagem de programação de alto nível e propósito geral que foi lançada pela primeira vez em 1991.
Quando selecionar Ferramentas > Macros > Organizar Macros > Python na barra de menus, o Calc exibe a caixa de diálogo Macros Python (Figura 18)
Figura 18: Diálogo Macros Python
Os recursos para editar e depurar scripts Python não estão integrados na interface de usuário padrão do LibreOffice. No entanto, você pode editar scripts Python com seu editor de texto preferido ou um IDE externo. A extensão Alternative Python Script Organizer (APSO) facilita a edição de scripts Python, em particular quando embutidos em um documento. Usando APSO, você pode configurar seu editor de código-fonte preferido, iniciar o shell Python integrado e depurar scripts Python. Para obter mais informações, pesquise Python no sistema de Ajuda do LibreOffice e visite a seção Projetando e desenvolvendo aplicativos Python do wiki da The Document Foundation ( https://wiki.documentfoundation.org/Macros/Python_Design_Guide ) e as páginas de ajuda começando em ( https://help.libreoffice.org/latest/en-US/text/sbasic/python/main0000.html )
A Listagem 9 é um exemplo de macro Python que define a célula A1 da primeira planilha num documento do Calc para o texto “Hello World from Python”.
Listagem 9. Macro Python de exemplo
import uno
def HelloWorld():
doc = XSCRIPTCONTEXT.getDocument()
cell = doc.Sheets[0]['A1']
cell.setString('Hello World from Python')
return
Inúmeros recursos estão disponíveis para fornecer auxílio na escrita de macros Use Ajuda > Ajuda do LibreOffice para abrir a página de ajuda do LibreOffice. O canto superior esquerdo do sistema de ajuda do LibreOffice contém uma lista suspensa que determina que texto de ajuda é mostrado. Para exibir a ajuda para o Basic, escolha LibreOffice Basic nessa lista.
Muitas macros excelentes são incluídas com o LibreOffice. Use Ferramentas > Macros > Organizar macros > LibreOffice Basic para abrir a caixa de diálogo Macros do LibreOffice Basic. Expanda a biblioteca Tools no recipiente de biblioteca LibreOffice. Explore o módulo Debug – alguns bons exemplos incluem o WritedbgInfo(documento) e o PrintdbgInfo (planilha).
Os links e referências a seguir contém informações sobre a programação de macros:
https://ask.libreoffice.org/pt-br/questions/ (um site de P&R (perguntas&respostas) onde os voluntários respondem questões sobre o LibreOffice também)
http://forum.openoffice.org/en/forum/ (Forum da comunidade OpenOffice/Apache; onde os voluntários respondem questões sobre o LibreOffice também)
http://api.openoffice.org/docs/common/ref/com/sun/star/module-ix.html (IDL oficial de referência. Aqui é possível encontrar praticamente todos os comandos com uma descrição).
https://wiki.documentfoundation.org/Documentation/Other_Documentation_and_Resources (verifique a sessão de Programadores do BASIC Programmers’ Guide e Developers’ Guide; o último possui explicações detalhadas)
http://www.pitonyak.org/oo.php (página de macro por Andrew Pitonyak)
http://www.pitonyak.org/AndrewMacro.odt (numerosos exemplos de macros funcionais)
http://www.pitonyak.org/OOME_3_0.odt (Livro de Andrew Pitonyak sobre macros)
http://www.pitonyak.org/database/ (vários exemplos de macros com uso do Base)
Atualmente não existem livros específicos para macros do LibreOffice disponíveis para baixar.
As informações nos livros a seguir são mais úteis para o LibreOffice; os livros estão disponíveis para compra na forma impressa e eletrônica de seus editores.
Dr. Mark Alexander Bain’s Aprenda programação de macro em Planilha OpenOffice.org.
Veja http://www.packtpub.com/openoffice-ooobasic-calc-automation/book.
Roberto Benitez's Programando Banco de dados com OpenOffice.org Base & Basic
Veja http://www.lulu.com/product/paperback/database-programming-with-openofficeorg-base-basic/3568728