programando_ooo_b

download programando_ooo_b

of 120

Transcript of programando_ooo_b

  • 8/6/2019 programando_ooo_b

    1/120

    Programando MacrosProgramando Macros

    Para OPara OOpenOffice.orgOpenOffice.org

    Verso _23_01_2006

    por

    Noelson Alves Duarte

    Copyright Noelson Alves Duarte

    permitida a cpia, distribuio e / ou modificao deste documento, sob os termos da GNU

    Free Documentation License, Version 1.1 ou uma verso posterior publicada pela Free Software Foundation. Uma cpia da licena acompanha este documento.

  • 8/6/2019 programando_ooo_b

    2/120

  • 8/6/2019 programando_ooo_b

    3/120

    Verso

    ndice

    1 Trabalhando com Macros.................................................................................................................. 6

    1.1 Introduo.................................................................................................................................. 61.2 Estrutura Geral das Macros........................................................................................................6

    1.3 Gravando Macros.......................................................................................................................71.4 Executando Macros....................................................................................................................8

    1.5 Organizando Macros..................................................................................................................8

    1.6 Atribuindo Macros a Eventos.................................................................................................. 11

    1.7 Gerenciando Pacotes................................................................................................................13

    2 Linguagem OpenOffice.org Basic................................................................................................... 16

    2.1 Componentes da linguagem.....................................................................................................162.2 Ambiente de Desenvolvimento................................................................................................16

    2.3 Anlise de um programa..........................................................................................................19

    2.4 Elementos do Basic..................................................................................................................22Palavras reservadas................................................................................................................... 22

    Regras para nomes.................................................................................................................... 22

    Comentrios.............................................................................................................................. 23

    Tipos de dados internos.............................................................................................................23Declarao de variveis.............................................................................................................23

    Constantes simblicas...............................................................................................................24

    Expresses.................................................................................................................................25

    2.5 Fluxo de controle da execuo.................................................................................................28

    Comando de Deciso If ... Then ... End If.................................................................................28

    Comando de Deciso Select Case............................................................................................. 29

    Comando de Repetio While ... Wend....................................................................................29Comando de Repetio For ... Next..........................................................................................30

    Comando de Repetio Do ... Loop .........................................................................................31

    Comandos de Desvio Incondicional..........................................................................................32

    Comandos de Controle de Erros............................................................................................... 33

    2.6 Tipos de dados avanados........................................................................................................33

    Vetores...................................................................................................................................... 34Vetor de vetores........................................................................................................................ 35

    Tipo de dado definido pelo usurio...........................................................................................36

    3 Organizao do Programa OOoBasic..............................................................................................38

    3.1 Comandos................................................................................................................................ 38

    3.2 Sub-rotinas...............................................................................................................................38

    3.3 Funes....................................................................................................................................393.4 Passagem de Parmetros..........................................................................................................40

    3.5 Escopo das variveis................................................................................................................41

    3.6 Chamada de Procedimentos.....................................................................................................42

    Procedimentos na mesma biblioteca.........................................................................................42

    Procedimentos em bibliotecas diferentes..................................................................................43

    Procedimentos em bibliotecas dinmicas..................................................................................44Procedimentos recursivos..........................................................................................................44

    3.7 Modelo Geral de uma Macro................................................................................................... 44

    4 Comandos e Funes do OOoBasic................................................................................................ 46

    4.1 Interao com o Operador........................................................................................................46

    Programando Macros para o OpenOffice.org 1

  • 8/6/2019 programando_ooo_b

    4/120

    Verso

    4.2 Instrues de tipos de dados.................................................................................................... 47

    Funes de verificao..............................................................................................................47

    Funes de converso............................................................................................................... 47

    4.3 Funes de cadeias de caracteres............................................................................................. 48

    4.4 Funes de Data e Hora...........................................................................................................494.5 Funes Matemticas...............................................................................................................50

    4.6 Instrues de arquivos e diretrios.......................................................................................... 50

    Funes de administrao......................................................................................................... 51

    Funes de abertura e fechamento de arquivos.........................................................................51

    Funes de entrada e sada........................................................................................................514.7 Funes Vetoriais.................................................................................................................... 52

    4.8 Instruo With ... End With..................................................................................................... 52

    4.9 Instrues Diversas..................................................................................................................53

    5 Programando Macros sem Objetos..................................................................................................54

    5.1 Funes para o Calc.................................................................................................................54

    Funes recebendo clulas........................................................................................................54Funes recebendo extenses de clulas...................................................................................55Funes Matriciais.................................................................................................................... 56

    5.2 Macros para Eventos................................................................................................................57

    6 API do OpenOffice.org Viso Geral.............................................................................................59

    6.1 Introduo................................................................................................................................ 59

    6.2 UNO.........................................................................................................................................59

    6.3 Organizao da API.................................................................................................................60Service.......................................................................................................................................60

    Interface.....................................................................................................................................60

    Struct.........................................................................................................................................61

    Exception.................................................................................................................................. 61

    Enum.........................................................................................................................................61

    Constant.................................................................................................................................... 62

    6.4 Mapeamento de dados............................................................................................................. 626.5 Guia de Referncia da API.......................................................................................................63

    6.6 Objetos.....................................................................................................................................65

    Mtodos do objeto.....................................................................................................................65

    Propriedades do objeto..............................................................................................................66

    Analisando um objeto............................................................................................................... 67

    6.7 Inspeo de objetos..................................................................................................................69

    Usando o IDE Basic..................................................................................................................69Usando o OOoBasic..................................................................................................................69

    Usando o XRay......................................................................................................................... 70

    6.8 Instrues UNO do OOoBasic.................................................................................................70

    7 Principais objetos e interfaces......................................................................................................... 72

    7.1 ServiceManager....................................................................................................................... 727.2 Desktop....................................................................................................................................73

    7.3 Colees...................................................................................................................................74

    Containeres................................................................................................................................75

    Acesso nomeado........................................................................................................................75

    Acesso indexado....................................................................................................................... 76

    Acesso seqncial..................................................................................................................... 77

    2 Programando Macros para o OpenOffice.org

  • 8/6/2019 programando_ooo_b

    5/120

    Verso

    7.4 Descritores............................................................................................................................... 78

    7.5 Listeners...................................................................................................................................78

    7.6 Fluxos.......................................................................................................................................80

    Acesso a arquivos......................................................................................................................80

    Fluxos de entrada e sada.......................................................................................................... 81Fluxos de texto..........................................................................................................................82

    8 Trabalhando com Documentos........................................................................................................85

    8.1 URL..........................................................................................................................................85

    8.2 Arquitetura FCM......................................................................................................................86

    Objeto Frame.............................................................................................................................86Ativando Documentos Abertos.................................................................................................87

    Executando Comandos UNO.................................................................................................... 87

    8.3 Filtros do OO.o........................................................................................................................ 88

    8.4 Descritor do Meio.................................................................................................................... 88

    8.5 Documentos............................................................................................................................. 89

    8.6 Interface XComponentLoader..................................................................................................918.7 Criando Documentos............................................................................................................... 928.8 Abrindo Documentos...............................................................................................................93

    8.9 Salvando e Exportando Documentos.......................................................................................93

    8.10 Imprimindo Documentos....................................................................................................... 94

    8.11 Fechando Documentos...........................................................................................................95

    8.12 Identificando documentos abertos......................................................................................... 95

    9 Documentos do Writer.....................................................................................................................979.1 Introduo................................................................................................................................ 97

    9.2 Acesso aos objetos................................................................................................................... 97

    9.3 Editando texto..........................................................................................................................97

    9.4 Pargrafos................................................................................................................................ 98

    9.5 Editando Texto usando Cursor................................................................................................ 99

    Cursor de texto..........................................................................................................................99

    Cursor da tela............................................................................................................................ 999.6 Formatando texto................................................................................................................... 100

    9.7 Organizao dos Estilos de Formatao................................................................................ 101

    Estilos de pgina..................................................................................................................... 102

    Estilos de Pargrafos...............................................................................................................102

    9.8 Busca e Substituio..............................................................................................................103

    Busca.......................................................................................................................................103

    Substituio.............................................................................................................................1049.9 Tabelas...................................................................................................................................104

    Linhas e Colunas..................................................................................................................... 105

    Editando clulas...................................................................................................................... 105

    Formatando clulas................................................................................................................. 105

    9.10 Campos................................................................................................................................ 106Identificando campos existentes..............................................................................................106

    Visitando e editando os campos inseridos.............................................................................. 107

    9.11 Cabealhos e Rodaps..........................................................................................................108

    9.12 Seleo.................................................................................................................................108

    10 Documentos do Calc....................................................................................................................110

    11 Documentos do Draw .................................................................................................................111

    Programando Macros para o OpenOffice.org 3

  • 8/6/2019 programando_ooo_b

    6/120

    Verso

    12 Documentos do Impress.............................................................................................................. 112

    13 Documentos do Base................................................................................................................... 113

    14 Dilogos.......................................................................................................................................114

    15 Formulrios..................................................................................................................................115

    16 Mais informaes........................................................................................................................ 11616.1 Na rede.................................................................................................................................116

    16.2 Com o autor......................................................................................................................... 117

    16.3 Histrico deste documento...................................................................................................117

    17 Crditos, Agradecimentos, Licena.............................................................................................118

    17.1 Crditos................................................................................................................................11817.2 Agradecimentos .................................................................................................................. 118

    17.3 Licena.................................................................................................................................118

    4 Programando Macros para o OpenOffice.org

  • 8/6/2019 programando_ooo_b

    7/120

    Verso

    Apresentao

    REESCREVER!!

    Programando Macros para o OpenOffice.org 5

  • 8/6/2019 programando_ooo_b

    8/120

    Trabalhando com Macros Verso

    1 Trabalhando com Macros

    1.1 Introduo

    Uma macro um programa escrito numa linguagem suportada pelo OpenOffice.org com a finalidade de automatizar tarefas do OpenOffice.org. Atualmente, as linguagens suportadas soOOoBasic, JavaScript, JavaBeans, Java e Python.

    O nosso trabalho ser dirigido para a linguagem OpenOffice.org Basic (OOoBasic).

    1.2 Estrutura Geral das MacrosAs macros do OpenOffice.org so organizadas num container do aplicativo ou do documento.As macros gravados num documento podem ser executadas apenas quando o documento estiver aberto. As macros do aplicativo podem ser executadas a qualquer momento.

    As macros do aplicativo podem ser criadas para serem usadas por todos os usurios ou porapenas um usurio. No primeiro caso, elas so instaladas sob um diretrio subordinado ao diretrio de instalao do OpenOffice.org. No segundo, so instaladas num diretrio subordinado ao diretrio da instalao do OpenOffice.org para aquele usurio.

    A macros do container documento so armazenadas dentro do prprio documento.

    Cada um destes containeres pode ter uma ou mais bibliotecas. Uma biblioteca pode conter umou mais mdulos. Um mdulo pode conter uma ou mais macros (rotinas) e, ainda, uma oumais caixas de dilogo (desenhadas com o editor de dilogos do IDE Basic).

    Para compreender esta estrutura, ative o dilogo Selector de macro, selecionando, na barra demenu principal, Ferramentas => Macros => Executar Macro.

    Na figura acima, observe os containeres do aplicativo Minhas macros e Macros doOpenOffice.org o primeiro contm as macros do usurio e o segundo as macros compartilhadas por todos os usurios. Logo abaixo, temos o container ooo_basic_v3.odt de um docu

    mento aberto no OO.o.

    6 Programando Macros para o OpenOffice.org

  • 8/6/2019 programando_ooo_b

    9/120

    Verso Trabalhando com Macros

    Note a biblioteca Standard, contendo o mdulo Module1 e, do lado direito, as macros Maine buscaPalavra existentes no Module1.

    As bibliotecas Standard - do usurio ou do documento - so criadas automaticamente pelo

    OpenOffice.org. Ainda, o prprio OpenOffice.org gerencia, automaticamente, a carga destasbibliotecas para a memria.

    1.3 Gravando Macros

    A partir da verso 1.1.x, o OO.o incluiu um gravador de macros que gera cdigo OOoBasic.Esta ferramenta facilita a automao de tarefas simples por usurios que no so desenvolvedores. O gravador encadeia os comandos executados na interface grfica e depois salva estescomandos como uma macro. Est disponvel apenas para o Writer e Calc.

    Crie um novo documento do Writer. Agora, suponha que voc execute com frequncia a bus

    ca da palavra captulo num texto. Vamos criar uma macro para esta tarefa: Selecione Ferramentas => Macros => Gravar Macro;

    A ferramenta Gravar Macro torna-se ativa. A partir deste momento,todos os comandos sero memorizados para gravao;

    Selecione Editar => Localizar e Substituir, digite captulo na caixa Procurar por,clique sobre o boto Localizar e, em seguida sobre o boto Fechar;

    Para encerrar a gravao, clique sobre Parar Gravao na ferramenta Gravar Macro.

    Surge o dilogo Macros do OpenOffice.org Basic. Selecione Module1, na biblioteca

    Standard, no container Minhas Macros e, em Nome da Macro, digite buscaPalavra;

    Para gravar a macro buscaPalavra, clique sobre o boto Salvar.

    Se o dilogo de criao de novo mdulo for exibido, digite um nome para o mdulo ouaceite o nome sugerido e clique sobre o boto Ok.

    Aps a gravao, o dilogo Macros do OpenOffice.org Basic ser fechado.

    Programando Macros para o OpenOffice.org 7

  • 8/6/2019 programando_ooo_b

    10/120

    Trabalhando com Macros Verso

    Antes de gravar a macro o usurio poder criar uma biblioteca (boto Nova Biblioteca) e/ouum mdulo (boto Novo Mdulo). Mas, pela interface grfica, uma nova biblioteca no podeser criada no container Macros do OpenOffice.org, porque este container protegido.

    Tenha em mente que o gravador de macros uma funcionalidade recente e alguns comandosda interface grfica esto indisponveis para gravao. Normalmente, estes comandos sogravados como comentrios da linguagem OOoBasic.

    1.4 Executando Macros

    Vamos, agora, testar a macro buscaPalavra:

    Selecione Ferramentas => Macros => Executar Macro;

    Aparece o dilogo Seletor de macro;

    Expanda a entrada Minhas macros e selecione o Module1, da biblioteca Standard; Selecione a macro buscaPalavra e clique sobre o boto Executar.

    Este procedimento deve ser usado para rodar qualquer macro do OpenOffice.org. Contudo,podemos rodar macros a partir da linha de comando (til para scripts). Veja alguns exemplos:

    > soffice.exe macro://nome_documento/Biblioteca.Modulo.Macroexecuta uma Macro num documento aberto> soffice.exe macro://./Standard.Modulo.Macroexecuta uma Macro num documento aberto e ativo> soffice.exe url_do_documento macro://./Standard.Modulo.MacroAbre um documento e executa uma macroExistem, ainda, configuraes do aplicativo que podem afetar a execuo de uma macro. Selecione Ferramentas => Opes, expanda a entrada OpenOffice.org, selecione Segurana eclique sobre o boto Segurana de macro para verificar as restries da sua instalao.

    1.5 Organizando Macros

    Atravs do dilogo Macros do OpenOffice.org Basic, podemos efetuar outras operaes sobre macros. Para ativ-lo, selecione Ferramentas => Macros => Organizar macros =>OpenOffice.org Basic.

    8 Programando Macros para o OpenOffice.org

    http://macro//nome_documento/biblioteca.modulo.macrohttp://macro//nome_documento/biblioteca.modulo.macrohttp://macro//nome_documento/biblioteca.modulo.macrohttp://macro//nome_documento/biblioteca.modulo.macrohttp://macro//nome_documento/biblioteca.modulo.macrohttp://macro//Standard.modulo.macrohttp://macro//Standard.modulo.macrohttp://macro//Standard.modulo.macrohttp://macro//Standard.modulo.macrohttp://macro//Standard.modulo.macrohttp://macro//Standard.modulo.macrohttp://macro//Standard.modulo.macrohttp://macro//Standard.modulo.macrohttp://macro//Standard.modulo.macrohttp://macro//Standard.modulo.macrohttp://macro//Standard.modulo.macrohttp://macro//Standard.modulo.macrohttp://macro//Standard.modulo.macrohttp://macro//Standard.modulo.macrohttp://macro//nome_documento/biblioteca.modulo.macrohttp://macro//Standard.modulo.macrohttp://macro//Standard.modulo.macro
  • 8/6/2019 programando_ooo_b

    11/120

    Verso Trabalhando com Macros

    As operaes possveis so:

    Boto Executar: outro modo para executar a macro selecionada. Aqui, apenas as macros doOOoBasic esto disponveis. Com o dilogo Seletor de macros, podemos executar macrosescritas em qualquer uma das linguagens suportadas pelo OpenOffice.org.

    Boto Atribuir: atribui uma macro a um item de menu, uma combinao de teclas, um conena barra de ferramentas ou a um evento do documento ou do aplicativo. Esta operao servista em detalhes noutro tpico.

    Boto Editar: abre o editor do IDE Basic para a edio do cdigo fonte da macro seleciona

    da, com o cursor posicionado no incio da mesma.

    Boto Excluir: apaga a macro selecionada, aps a confirmao do usurio.

    Boto Organizador: ativa o dilogo Organizador de Macros do OpenOffice.org Basic.Este dilogo permite operaes sobre mdulos, caixas de dilogos e bibliotecas. Clique sobreo boto para ativar o dilogo e vamos analis-lo.

    Programando Macros para o OpenOffice.org 9

  • 8/6/2019 programando_ooo_b

    12/120

    Trabalhando com Macros Verso

    Na guia Mdulos temos opes para criar e excluir mdulos. Na guia Caixas de dilogotemos opes para criar e excluir dilogos. Estas tarefas tambm podem ser executadas direta

    mente no IDE Basic. No existem opes para mover ou copiar mdulos e caixas de dilogosentre bibliotecas. Mas, estas operaes podem ser feitas, usando os recursos de arrastar esoltar dentro deste dilogo, nas guias correspondentes.

    Na guia Bibliotecas podemos selecionar o container (na lista Local) e, a seguir, efetuar umadas operaes abaixo:

    Boto Editar: abre o IDE Basic para a edio do cdigo fonte ou das caixas de dilogosda biblioteca. Esta a nica operao disponvel para as bibliotecas do container Macrosdo OpenOffice.org (vimos que ele protegido);

    Boto Senha: protege uma biblioteca, exceto a Standard que no pode ser protegida.Aps a proteo de uma biblioteca, qualquer operao sobre a mesma, somente ser pos

    svel mediante a entrada da senha. Para executar uma macro protegida sem a entrada dasenha, podemos associ-la a um evento ou cham-la atravs de outra macro numa biblioteca no protegida;

    Boto Nova: cria uma biblioteca no container selecionado, aps a definio do nome danova biblioteca;

    Boto Excluir: exclui a biblioteca selecionada, aps a confirmao do usurio. A biblioteca Standard no pode ser excluda;

    Boto Acrescentar: acrescenta uma biblioteca ao container selecionado na lista Local.Atravs desta opo, podemos instalar bibliotecas distribudas em documentos do

    OpenOffice.org. Um clique neste boto comanda a abertura do dilogo de seleo de arquivos, para a escolha do documento contendo a biblioteca a ser acrescentada. Aps a seleo do documento, o dilogo Acrescentar Biblioteca ser exibido. Para acrescentar bibliotecas ao container Macros e caixas de dilogo do OpenOffice.org, consulte a seoGerenciando Pacotes, neste manual.

    10 Programando Macros para o OpenOffice.org

  • 8/6/2019 programando_ooo_b

    13/120

    Verso Trabalhando com Macros

    Supondo que voc deseja acrescentar uma biblioteca Library1 ao container selecionado nalista Local, marque a opo Library1, desmarque a opo Standard e clique sobre o boto

    Ok. Numa re-instalao de bibliotecas, marque tambm a opo Substituir bibliotecas existentes. A biblioteca Standard de um container qualquer no pode ser substituda. A opo Inserir como referncia, quando ativa, acrescenta a biblioteca no modo somente leitura e deveser usada para macros localizadas em pastas diferentes das padronizadas.

    Ao acrescentar bibliotecas do container da aplicao ou de um diretrio, no dilogo de seleode arquivos, selecione o diretrio contendo a macro. Voc ver dois arquivos: script.xlb e dialog.xlb, selecione o arquivo script.xlb e comande Abrir. A seguir proceda como j explicado.

    Finalmente, as bibliotecas do container Macros e caixas de dilogo do OpenOffice.org sogravadas como um subdiretrio, com o nome igual ao da biblioteca, subordinado ao diretrio/share/basic. As bibliotecas do container Minhas macros e caixas de dilogo

    so gravadas, tambm, em subdiretrios do diretrio /user/basic.

    1.6 Atribuindo Macros a Eventos

    Um evento ocorre a partir de uma ao do usurio sobre a interface grfica. As macros doOpenOffice.org podem ser associadas a eventos do aplicativo ou do documento. Alm desteseventos pr-definidos, podemos atribuir uma macro a uma combinao de teclas, a um conena barra de ferramentas ou a uma entrada na barra de menu. Aps a atribuio, sempre que oevento ocorrer a macro ser executada.

    Um evento do aplicativo ocorre para todo o OpenOffice.org e um evento do documento ocorre

    somente no documento. Por exemplo, o evento Fechar Documento est disponvel para oaplicativo e para um documento. Uma macro atribuda a este evento do aplicativo ser executada quando qualquer documento do OpenOffice.org for fechado, do contrrio (evento do documento) a macro ser executada apenas quando o documento a que se refere for fechado.

    A associao de macros a eventos pode ser executada a partir do boto Atribuir no dilogoMacros do OpenOffice.org Basic ou selecionando Ferramentas => Personalizar na barrade menus. Aps o clique sobre o boto Atribuir, o dilogo Personalizar ser exibido.

    Programando Macros para o OpenOffice.org 11

  • 8/6/2019 programando_ooo_b

    14/120

    Trabalhando com Macros Verso

    Para atribuir uma macro a um evento:

    Clique sobre a guia Eventos para ver a relao de eventos disponveis;

    Escolha o tipo do evento (documento/aplicativo) na caixa de listagem Salvar em;

    Selecione o evento desejado na relao de eventos;

    Clique sobre o boto Atribuir Macro para ativar o dilogo Seletor de macro;

    Selecione o mdulo e a macro e clique sobre o boto OK. Note que o URL da macro ser

    acrescentada na coluna Macro atribuda, ao lado do evento selecionado.

    12 Programando Macros para o OpenOffice.org

  • 8/6/2019 programando_ooo_b

    15/120

    Verso Trabalhando com Macros

    Clique sobre o boto OK no dilogo Personalizar.

    Para remover uma atribuio de macro a um evento, selecione o evento e clique sobre o botoRemover Macro, no dilogo Personalizar.

    Neste mesmo dilogo podemos definir outras maneiras para rodar uma macro. Na guia Menus possvel acrescentar um item de menu, na guia Teclado pode-se definir uma combinao deteclas e na guia Barra de Ferramentas um cone para comandar a execuo da macro.

    Alm dos eventos j mencionados, alguns objetos do OpenOffice.org como Controles, Grficos, Quadros e Hiperlinks, possuem eventos que podem ser associados a macros. Abaixo vemos alguns eventos disponveis para o objeto Figura (clique sobre uma figura e selecioneFormatar => Figura => guia Macro).

    Consulte a ajuda do OpenOffice.org para uma relao dos objetos, eventos e comandos parafazer a atribuio de macros.

    Outro modo comum de executar macros atravs de um evento de um controle de formulrionum documento, por exemplo, um clique sobre um Boto de Ao. Esta operao ser apresentada adiante, no captulo Formulrios.

    Finalmente, no Writer, em Inserir => Campos => Outros, na guia Funo, existe o campoExecutar macro, que dispara a macro associada ao campo toda vez que o usurio clicar sobreo mesmo.

    1.7 Gerenciando Pacotes

    Vimos como instalar mdulos e bibliotecas usando o Gerenciador de Macros. Contudo, estemtodo tem limitaes. Por exemplo, um desenvolvedor que deseja distribuir um suplemento(Addon), que instale suas prprias configuraes (dados, interface grfica, bibliotecas, etc)no pode usar o Gerenciador de Macros.

    Programando Macros para o OpenOffice.org 13

  • 8/6/2019 programando_ooo_b

    16/120

    Trabalhando com Macros Verso

    O OpenOffice.org usa o conceito de pacote para facilitar a distribuio de componentes. Umpacote um arquivo no formato zip, contendo todos os arquivos do componente. Para a verso 2.0, os pacotes devem ter o nome na forma: *.uno.pkg (por exemplo: meuSuplemento.uno.pkg) e, alm dos arquivos do componente, ele deve conter uma pasta META-INF com

    um arquivo manifest.xml.Num ambiente do OpenOffice.org, um pacote pode ser instalado para um usurio ou para todos os usurios (rede) ou, ainda, para uma estao de trabalho.

    O gerenciador de pacotes, para o OO.o 1.x.x, o programa pkgchk.exe um utilitrio de linhade comando, que pode ser encontrado no diretrio /program. Antes de us-lo,feche todos os processos do OpenOffice, inclusive o incio rpido. Para ver as suas opes, noshell do seu sistema digite:

    \program\pkgchk --help

    A verso 2.0 do OpenOffice.org traz um novo gerenciador de pacotes, o programa unopkg.exe, tambm localizado no diretrio /program. Evite usar o pkgchk nestaverso, pois o unopkg reconhece os pacotes das verses anteriores. Para ver as suas opes,digite na linha de comando do sistema:

    \program\unopkg --helpou, para ativar a sua interface grfica:

    \program\unopkg guiA interface grfica pode ser ativada, tambm, atravs do menu do OpenOffice.org ( Ferramentas => Gerenciador de pacotes ). Segue uma imagem do dilogo do aplicativo.

    Note que existem dois containeres: Meus pacotes e Pacotes do OpenOffice.org. O primeiro

    contm os pacotes instalados para o usurio e o segundo os pacotes compartilhados por todos

    14 Programando Macros para o OpenOffice.org

  • 8/6/2019 programando_ooo_b

    17/120

    Verso Trabalhando com Macros

    os usurios. No podemos instalar pacotes do segundo tipo a partir do OpenOffice.org, paraisto o usurio deve usar a linha de comando e ter direitos de escrita na pasta .

    Eis as opes de gerenciamento:

    Boto Adicionar : permite acrescentar um pacote ao ambiente do OpenOffice.org. Um cliqueneste boto, abre o dilogo Adicionar Pacote, para a seleo do pacote a ser instalado.

    Boto Remover : remove o pacote selecionado.

    Boto Ativar : ativa o pacote selecionado.

    Boto Desativar : desativa o pacote selecionado.

    Boto Exportar : exporta um pacote no formato do pkgchk para o novo formato (acrescenta apasta META-INF com o arquivo manifest.xml). A extenso do nome do arquivo deve ser alterada manualmente.

    O unopkg pode ser utilizado para instalar macros de qualquer linguagem, inclusive as macrosque devem ser compartilhadas por todos os usurios (container Macros do OpenOffice.org).Para tal, voc deve criar um arquivo zip com todos os arquivos da sua macro, ter os direitosde escrita no diretrio e usar o gerenciador a partir da linha de comando.

    Programando Macros para o OpenOffice.org 15

  • 8/6/2019 programando_ooo_b

    18/120

    Linguagem OpenOffice.org Basic Verso

    2 Linguagem OpenOffice.org Basic

    A linguagem BASIC (Beginner's All-purpose Symbolic Instruction Code) foi criada no ano de1963, pelos matemticos John George Kemeny e Tom Kurtzas, no Dartmouth College. Desde ento, pela facilidade de uso e aplicao geral, tornou-se uma linguagem de programao de computadores muito popular, em todo o mundo.

    A Linguagem OpenOffice.org Basic mantm as principais caractersticas das verses atuais doBASIC, no que diz respeito sintaxe, tipos de dados, operadores, comandos, funes internas eorganizao geral do programa. Alm disto, o OpenOffice.org Basic permite o acesso a umagrande quantidade de objetos, com seus mtodos e propriedades, especficos do OpenOffice.org.

    2.1 Componentes da linguagem

    Os principais componentes da linguagem so:

    Linguagem Basic: Define os construtores bsicos da linguagem, os operadores e tipos de dados suportados e as regras de combinao dos elementos.

    Biblioteca de Funes do Basic (RTL Basic): Contm diversas funes pr-definidas e compiladas juntamente com o interpretador OOoBasic.

    API do OpenOffice.org: Permite o acesso aos objetos UNO do OpenOffice.org.

    IDE Basic: Ambiente de desenvolvimento para a edio e depurao de cdigo fonte e para odesenho de caixas de dilogos.

    Ajuda do OOoBasic: Ajuda para todas as caractersticas da linguagem (funes, comandos,tipos de dados, operadores, etc). Entretanto, no oferece ajuda para os objetos da API.

    Eis algumas limitaes da linguagem: No permite a criao de objetos, no h suporte paralinhas de execuo (threads) e no permite a escrita de componentes UNO (exceto listeners).

    2.2 Ambiente de Desenvolvimento

    O OpenOffice.org possue um Ambiente de Desenvolvimento Integrado (IDE Basic) que oferece as funes bsicas para a programao de macros OOoBasic.

    Entre as suas funcionalidades cabe ressaltar:

    Editor de texto para a edio do cdigo fonte;

    Funes bsicas de acompanhamento da execuo da macro;

    Funes bsicas para a depurao do cdigo fonte;

    Editor de Caixas de Dilogo para a criao e testes de Dilogos personalizados.

    Vamos analisar o IDE Basic. Crie um documento do Writer e salve-o como primeirosPassos,em seguida:

    selecione Ferramentas=>Macros=>Organizar Macros=>OpenOffice.org Basic;

    no container primeirosPassos.odt, selecione a biblioteca Standard;

    16 Programando Macros para o OpenOffice.org

  • 8/6/2019 programando_ooo_b

    19/120

    Verso Linguagem OpenOffice.org Basic

    clique sobre o boto Novo para criar um mdulo na biblioteca Standard, aceite o nomeModule1 e clique sobre OK;

    a janela do IDE Basic ser ativada, vamos analis-la.

    Note que, ao iniciar um novo mdulo, o IDE acrescenta uma linha de cdigo comentada euma macro Main vazia (linhas: Sub Main e End Sub).

    Temos, na parte superior do IDE, a barra de menus e a barra de ferramentas com os cones. Naparte central, temos o editor de texto e, esquerda deste, a barra de indicao. Logo abaixo doeditor, no lado esquerdo, vem a janela de inspeo e, no lado direito, a janela de chamadas.Mais abaixo temos a barra de mdulos e, por fim, a barra de estado.

    Na barra de ferramentas, alm dos cones j identificados, temos ainda o Catlogo de objetos,Selecionar Macros e Selecionar Mdulo. Apontando o cursor do mouse para um cone, umapequena descrio sobre o mesmo ser exibida. Vejamos a funcionalidade dos principaiscones:

    Compilar: faz uma verificao da sintaxe do cdigo fonte do mdulo corrente, apenas.

    Executar: verifica a sintaxe do cdigo fonte de todos os mdulos da biblioteca corrente e, senenhum erro for encontrado, inicia a execuo da primeira macro do mdulo corrente. Emcaso de erro, uma caixa de dilogo, com informaes sobre o mesmo, ser exibida. Durante aexecuo da macro algum erro (run-time) pode ocorrer. Para uma relao dos cdigos de errosrun-time, consulte a Ajuda do OOoBasic (no IDE tecle F1).

    Programando Macros para o OpenOffice.org 17

  • 8/6/2019 programando_ooo_b

    20/120

    Linguagem OpenOffice.org Basic Verso

    Parar macro: finaliza a execuo da macro. til, por exemplo, para interromper um loopinfinito.

    Depurao Parcial: executa uma macro comando a comando, as chamadas de rotinas so

    tratadas como um s comando. Durante a depurao, uma seta amarela, na barra de indicao, aponta para a linha a ser executada no prximo passo.

    Depurao Total: acompanha a execuo de todos os comandos da macro, inclusive os comandos das rotinas chamadas a partir da macro.

    Depurao Circular: executa a macro sem acompanhar nenhum comando. Use para sair deuma depurao total e retornar a uma depurao parcial.

    Ativar/Desativar ponto de interrupo: Um ponto de interrupo um local (linha) onde aexecuo da macro ser temporariamente interrompida. Para ativar ou desativar um ponto deinterrupo, posicione o cursor na linha desejada e clique sobre este cone. Aps a definio,uma marca circular vermelha surge na barra de indicao lateral.

    Gerenciar pontos de interrupo: Exibe um dilogo para incluir ou excluir pontos de interrupo. Os nmeros das linhas com pontos de interrupco so exibidos. O campo Contagemde Passagens indica que a macro ser interrompida aps a ensima passagem pelo ponto deinterrupo, isto desejvel porque, s vezes, uma linha de cdigo s apresenta erros quandoexecutada mais de uma vez.

    Ativar inspeo: Permite o acompanhamento, na janela de inspeo, do valor de uma varivel. Para ativar uma inspeo, selecione a varivel no cdigo fonte e clique sobre este cone.

    Aps a definio, uma entrada com o nome da varivel ser acrescentada na janela de inspeo e o cone Remover Inspeo, nesta janela, ser ativado.

    Localizar parnteses: Seleciona um trecho de cdigo entre parnteses.

    Inserir Controles: Ativo apenas no editor de dilogos, contm os controles das caixas dedilogo, alm de outras operaes relacionadas a dilogos.

    Inserir cdigo fonte do BASIC: Permite a seleo de um arquivo ASCII, contendo cdigofonte BASIC, para ser inserido no mdulo corrente.

    Salvar BASIC: Exporta o cdigo fonte do mdulo corrente para um arquivo ASCII.

    Catlogo do objetos: Apresenta um navegador para os objetos do OOoBasic.

    Selecionar macro: Ativa o dilogo Macros do OpenOffice.org Basic.

    18 Programando Macros para o OpenOffice.org

  • 8/6/2019 programando_ooo_b

    21/120

    Verso Linguagem OpenOffice.org Basic

    Selecionar mdulo: Ativa o dilogo Organizador de Macros do OpenOffice.org Basic.

    Na barra de indicao acompanhamos a execuo da macro, os pontos de interrupo e as linhas que provocam algum erro.

    Na janela de inspeo verificamos o valor e as propriedades das variveis definidas na caixaObservar. Tambm, durante a execuo, podemos posicionar o cursor do mouse sobre umavarivel para verificar o seu contedo.

    A janela de chamadas exibe a situao da pilha de rotinas durante a execuo da macro, ouseja, a hierarquia das rotinas que esto sendo executadas no momento.

    A barra de mdulos deve ser usada para navegar entre mdulos e caixas de dilogo.

    Para se familiarizar com o IDE Basic, digite o cdigo a seguir na macro Main, de modo queela fique com esta aparncia:

    Sub Main

    nome = InputBox ("Digite o seu nome:")If (nome = "") ThenMsgBox "Ol usurio!"

    ElseMsgBox "Ol " & nome

    End IfEnd Sub

    Execute a macro, clicando sucessivamente sobre o cone Depurao Parcial, note a setaamarela na barra de indicao.

    Defina um ponto de interrupo na linha If (nome = "") Then.

    Selecione a varivel nome na segunda linha e clique sobre Ativar Inspeo. Observe a

    janela de inspeo. Execute a macro usando o cone Depurao Total, observe as mudanas nas janelas de in

    speo e de chamadas.

    Remova o ponto de interrupo e a Inspeo da varivel nome.

    Execute a macro clicando sobre o cone Executar.

    Verifique a funcionalidade do catlogo de objetos, do seletor de macros e de mdulos.

    Estes passos so suficientes para uma introduo ao IDE Basic. Naturalmente, ao escrever edepurar suas prprias macros, voc aprender mais.

    Deste ponto em diante, deixo por sua conta a criao de documentos para testar o cdigofonte. Sugiro que voc crie documentos (Writer ou Calc) para cada captulo, como, por exemplo, macros_cap2.odt para os exemplos deste captulo. De modo geral, apenas os exemploscontendo as linhas Sub ... End Sub podem ser executados. Os outros trechos decdigo explicam algum conceito ou comando da linguagem.

    2.3 Anlise de um programa

    Para explicar algumas caractersticas do OOo Basic, vamos apresentar e analisar, passo a passo, um exemplo simples de programa.

    Programando Macros para o OpenOffice.org 19

  • 8/6/2019 programando_ooo_b

    22/120

    Linguagem OpenOffice.org Basic Verso

    Crie um documento do Writer e salve-o como exemplosBasic, em seguida:

    selecione Ferramentas=>Macros=>Organizar Macros=>OpenOffice.org Basic;

    no container exemplosBasic.odt, selecione a biblioteca Standard;

    clique sobre o boto Novo para criar um mdulo na biblioteca Standard, aceite o nomeModule1 e clique sobre OK;

    A nova janela que surgiu o editor Basic, parte do IDE Basic do OpenOffice.org. Esta janela,na sua parte central, contm as linhas:

    REM ***** BASIC *****

    Sub Main

    End Sub

    Se voc no chegou neste ponto, consulte a seo Ambiente de Desenvolvimento, destaApos-tila. L, existem informaes detalhadas sobre o IDE Basic.

    Vamos ao nosso exemplo. Ele solicita o nome do operador, obtm a hora do sistema e fazuma saudao apropriada. Digite o cdigo fonte abaixo, entre as linhas Sub Main e End Sub:

    Dim sNome As String ' varivel para guardar o nomeDim sSauda As String ' varivel para guardar a saudaoDim sHora As Integer ' varivel para guardar a hora do sistema

    sHora = Hour ( Now )sNome = InputBox ( "Digite o seu Nome:", "Caixa de entrada", "Operador" )If ( sHora > 6 And sHora < 18 ) Then

    sSauda = "Bom Dia! "

    ElsesSauda = "Boa Noite! "

    End IfMsgBox sSauda + sNome

    Voc acabou de criar uma macro chamada Main. Execute a macro, surge uma caixa de entrada, solicitando o seu nome, digite-o e clique sobre o boto Ok. Surgir um dilogo com umasaudao, clique em Ok para encerrar a execuo da macro. Se ocorrer algum erro, revise ocdigo digitado e recomece.

    Vamos analisar, passo a passo, o cdigo fonte:

    REM ***** BASIC *****

    Esta linha contm um comentrio. Comentrios no so executados.Sub MainEsta linha declara e define a sub-rotina Main e deve estar acompanhada de uma linha EndSub. Entre as duas linhas deve vir o cdigo fonte que d funcionalidade a sub-rotina.

    Dim sNome As String ' varivel para guardar o nomeDim sSauda As String ' varivel para guardar a saudaoDim sHora As Integer ' varivel para guardar a hora do sistema

    Estas linhas declaram e inicializam as variveis que sero usadas na macro. O apstrofemarca o incio de comentrios numa linha de cdigo.

    sHora = Hour ( Now )

    20 Programando Macros para o OpenOffice.org

  • 8/6/2019 programando_ooo_b

    23/120

    Verso Linguagem OpenOffice.org Basic

    Aqui, chamamos duas funes internas do Basic. A funo Now, obtm a hora completa dosistema (hh:mm:ss). A funo Hour recebe o valor retornado por Now e extrai somente a hora. Em seguida, o valor obtido por Hour ( a hora ) armazenado na varivel sHora. Neste contexto, o sinal de igual ( = ) chamado operador de atribuio. Tudo que estiver do lado dire

    ito do operador de atribuio recebe o nome de expresso, neste caso Hour ( Now ).sNome = InputBox ( "Digite o seu Nome:", "Caixa de entrada", "Operador" )

    Esta linha chama a funo InputBox, do Basic, que apresenta a caixa de dilogo para lidarcom a entrada do nome do operador. Note que passamos trs cadeias de caracteres para estafuno. Estes valores (as cadeias) so chamados de parmetros da funo. O primeiroparmetro uma mensagem para o operador, o segundo o ttulo do dilogo e o terceiro ovalor padro da caixa de texto. A funo InputBox retorna o contedo da caixa de texto sevoc clicar sobre o boto Ok, seno ( clique sobre o boto Cancelar ou Fechar ) retorna umacadeia vazia. Aps encerrar o dilogo, o valor retornado ser atribudo varivel sNome.

    Ainda, sobre parmetros, podemos dizer que a funo Now no tm parmetro e que a funoHour recebe um parmetro.

    If ( sHora > 6 And sHora < 18 ) ThenAqui, iniciamos a execuo de um comando de deciso. Estamos dizendo ao Basic: se o valor armazenado na varivel sHora for maior que 6 e menor que 18 ento execute o prximobloco de cdigo. Os sinais > e < so chamados operadores relacionais. A palavra And chamada de operador lgico. O contedo entre parnteses uma expresso composta queser avaliada como Verdadeira (True) ou Falsa (False). Ela ser verdadeira, se ambas as expresses ( sHora > 6; sHora < 18) forem verdadeiras.

    sSauda = "Bom Dia! "A expresso Bom Dia! ser atribuda a sSauda, se a expresso da linha anterior for avaliada como verdadeira (True).

    ElseSeno, a expresso foi avaliada como falsa (False), execute o prximo bloco de cdigo.

    sSauda = "Boa Noite! "A expresso Boa Noite! atribuda varivel sSauda.

    End IfEsta linha indica o final do comando de deciso IF ... THEN ... ELSE ... END IF.

    MsgBox sSauda + sNomeEsta linha chama a sub-rotina MsgBox, do Basic, que exibe uma caixa de mensagem para ooperador. Ela recebe um parmetro, neste caso a expresso sSauda + sNome. O sinal ( + ),neste contexto, chamado de operador de concatenao, pois junta as cadeias de caracteresguardadas nas variveis sSauda e sNome. Clique sobre o boto OK para fechar a caixa demensagem.

    End SubEsta linha indica o trmino da sub-rotina, iniciada na linha SUB Main. No esquea, uma linha SUB ... precisa estar associada a uma linha END SUB.

    Neste tpico, voc aprendeu diversos conceitos (esto em negrito) relacionados com a linguagem Basic. Se algum ponto no foi compreendido, execute novamente o exemplo (use ocone Depurao Parcial) e leia o passo a passo, tentando associar o que ocorreu durante aexecuo com as linhas de cdigo.

    Programando Macros para o OpenOffice.org 21

  • 8/6/2019 programando_ooo_b

    24/120

    Linguagem OpenOffice.org Basic Verso

    2.4 Elementos do Basic

    Desta seo at o Captulo 4 inclusive, veremos superficialmente os principais elementos da

    linguagem Basic. Lembro que a Ajuda do OOoBasic abrange todos os aspectos da linguageme contm exemplos simples para todas as instrues. Para obter ajuda, basta pressionar a teclaF1, no IDE Basic.

    Palavras reservadas

    Uma palavra reservada um identificador ( nome ) utilizado internamente pela linguagem Basic. As palavras reservadas do Basic so aquelas usadas nos seus comandos, nas suas funesinternas, nas suas constantes e nos seus operadores. Abaixo, alguns exemplos:

    BEEP - comando do BasicCALL - comando do BasicSUB - comando do BasicFOR - parte de um comando do BasicNEXT - parte de um comando do BasicEXIT - parte de comandos do BasicWHILE - parte de comandos do BasicDO - parte de comandos do BasicSTR$ - funo do BasicTRIM$ - funo do BasicSQR - funo do Basic

    AND - operador do BasicOR - operador do BasicPI - constante definida pelo BasicO principal sobre estas palavras : elas no podem ser usadas como nomes para identificarvariveis, constantes ou procedimentos definidos pelo programador.

    Regras para nomes

    Devemos observar as seguintes regras para os nomes das nossa variveis, constantes, sub-rotinas e funes:

    Nomes so compostos por letras (A a Z), dgitos (0 a 9) e sublinhado (_);Caracteres especiais e de pontuao no so permitidos ( ex: letras acentuadas, vrgula );Nomes devem comear por uma letra do alfabeto;Nomes no podem conter mais de 255 caracteres;Nomes no diferenciam entre letras maisculas e minsculas;Nomes contendo espao so permitidos, mas devem estar entre colchetes;Palavras reservadas no podem ser usadas como nomes definidos pelo programador.

    Exemplos:

    Nomes vlidos: ptoIni, ponto2, flag, minha_Funcao, [Minha Variavel]

    Nomes invlidos: 2_ponto, minha?Varivel, celsius, Retngulo, BEEP

    22 Programando Macros para o OpenOffice.org

  • 8/6/2019 programando_ooo_b

    25/120

    Verso Linguagem OpenOffice.org Basic

    Comentrios

    Numa macro, as linhas iniciadas por apstrofe ou pela palavra reservada REM ( de REMark

    er) so consideradas como comentrios, portanto no so processadas.' Isto um comentrioREM O cdigo abaixo inicializa as variveis de ambiente

    Os comentrios (com apstrofe) podem ser colocados na frente de uma linha de cdigo.

    DIM coord_X As Double ' varivel para guardar a coordenada X do pontoDIM coord_Y As Double ' varivel para guardar a coordenada Y do ponto

    Tipos de dados internos

    Inteiros ( INTEGER )Um inteiro pode conter um valor na faixa de -32768 a 32767.

    Inteiros Longos ( LONG )Um inteiro longo pode conter um valor na faixa de -2.147.483.648 a 2.147.483.647.

    Ponto flutuante simples ( SINGLE )Valores de preciso simples podem variar de 3.402823E38 a 1.401298E-45, para nmerospositivos ou negativos.

    Ponto flutuante duplo ( DOUBLE )Os valores de dupla preciso variam na faixa de 1.797693134862315E308 a 4.94066E-324,para valores negativos ou positivos.

    Cadeias de caracteres ( STRING )Uma cadeia pode conter at 64000 caracteres ( 64 Kb ).

    Moeda ( CURRENCY )Os valores deste tipo variam de -922.337.203.685.477,5808 at 922.337.203.685.477,5807.

    Booleano ( BOOLEAN )Os valores deste tipo podem ser True (verdadeiro) ou False (falso)

    Data ( DATE )Podem conter valores de data e tempo armazenados num formato interno.

    Variante (VARIANT)Podem conter qualquer tipo de dado

    Declarao de variveis

    Podemos declarar variveis explicitamente com a palavra reservada DIM, do modo abaixo:

    DIM nome_da_variavel AS tipo_de_dadoOu:

    DIM nome_da_variavel seguido do caractere indicador do tipo de dado

    Programando Macros para o OpenOffice.org 23

  • 8/6/2019 programando_ooo_b

    26/120

    Linguagem OpenOffice.org Basic Verso

    nome_da_variavel um nome definido pelo programador, conforme as regras de nomeao.

    Exemplos:

    DIM varInteira AS INTEGER ' Declara uma variavel inteira

    DIM varInteira% ' Declara uma variavel inteira (%)DIM varIntLongo AS LONG ' Declara uma variavel longaDIM varIntLongo& ' Declara uma variavel longa (&)DIM varString AS STRING ' Declara uma variavel stringDIM varString$ ' Declara uma variavel string ($)DIM varSingle AS SINGLE ' Declara uma variavel real simplesDIM varSingle! ' Declara uma variavel real simples (!)DIM varDupla AS DOUBLE ' Declara uma variavel real duplaDIM varDupla# ' Declara uma variavel real dupla(#)DIM varPreco AS CURRENCY ' Declara uma variavel moedaDIM varPreco@ ' Declara uma variavel moeda (@)

    Podemos declarar uma varivel, no momento do seu emprego, acrescentando o caractere detipo ao nome da varivel, como nos exemplos abaixo:

    UmInteiro% = 1500 ' declara um inteiroUmLongo& = 2195678 ' declara um inteiro longoMeuNome$ = JOS DE ANDRADE ' declara uma cadeiaUmRealSimples! = 15.555 ' declara um real simplesUmRealDuplo# = coordEne * sin(30) ' declara um real duplo

    Se o tipo de dado no for indicado a varivel ser assumida como Variant.

    O valor de uma varivel declarada ser 0 para tipos numricos, uma cadeia nula para Strings eFalse para Boolean.

    recomendvel a declarao explcita das variveis de um programa, bem como a escolha de

    nomes significativos para as mesmas. Para forar a declarao de todas as variveis, use a linha de comando abaixo, no incio do mdulo:

    OPTION EXPLICIT

    O OOoBasic no nos obriga a declarar explicitamente uma varivel. Isto significa que, apesarde no recomendado, podemos criar uma varivel sem a declarao, nestes casos o tipo dedado ser assumido durante a operao de atribuio.

    Constantes simblicas

    Para facilitar a leitura de uma macro, os valores literais (1000, S, 2.718), usados ao longo damesma, devem ser declarados como constantes simblicas, com o comando CONST, fora dequalquer sub-rotina ou funo, assim:

    ' declarao de constantesConst NR_PONTOS% = 1000 ' nmero de pontos = 1000Const SIM$ = "S" ' constante SIM = "S"Const BASE_NATURAL# = 2.718 ' base log. naturais

    Posteriormente, podemos usar estas constantes numa expresso, no lugar dos seus valores literais, por exemplo:

    DIM coordX (NR_PONTOS) As Double ' declara vetor com 1001 elementos

    24 Programando Macros para o OpenOffice.org

  • 8/6/2019 programando_ooo_b

    27/120

    Verso Linguagem OpenOffice.org Basic

    valor# = valor1 * BASE_NATURAL ' bem mais compreensvel!

    If (Resposta$ = SIM) Then' se resposta = "S" ento' execute os comandos

    End If

    Aps a declarao de uma constante, o seu valor no poder ser mudado dentro do programa.

    Constantes simblicas facilitam a manuteno do programa, pois voc precisa alterar apenas oseu valor, em vez de todas as ocorrncias do valor literal dentro do programa.

    O OpenOffice.org Basic possui as seguintes constantes pr-definidas: PI, TRUE e FALSE.

    Expresses

    Uma expresso uma constante, uma varivel, uma funo, ou qualquer combinao destas,separadas por operadores e parnteses, escrita segundo as regras do Basic e passvel de avaliao. Seguem os principais operadores encontrados em expresses.

    Operador de Atribuio

    O resultado de uma expresso pode ser atribuido a uma varivel com o uso do operador deatribuio, o sinal de igual ( = ). Note que neste contexto, o sinal de igual no significa umacomparao, mas sim uma atribuio, isto , o resultado da expresso do lado direito do sinalser atribudo varivel do lado esquerdo do sinal. Exemplos:

    ' declara as variveis diametro e raioDim diametro#, raio#

    ' atribui o valor 2.0 ao raio ( 2.0 uma expresso )raio = 2.0' atribui o resultado da expresso ( 2 * raio ) a diametrodiametro = 2 * raio

    Operadores Aritmticos

    So usados com operandos numricos e produzem resultados numricos. Os operandos podemser constantes numricas, variveis numricas ou funes que retornam valores numricos. Osoperadores so:

    Operador Usado para Operandos

    + Somar expresses 2

    - Subtrair expresses 2

    * Multiplicar expresses 2

    / Dividir a primeira pela segunda expresso 2

    \ Dividir expresses inteiras 2

    Mod Obter o resto de uma diviso inteira 2

    ^ Exponenciao 2

    Exemplos:

    Programando Macros para o OpenOffice.org 25

  • 8/6/2019 programando_ooo_b

    28/120

    Linguagem OpenOffice.org Basic Verso

    ' valor = 0.5 ( note que 5 e 10 so promovidos a Double )valor# = 5/10' cos() uma funo interna do BasiccosTeta# = cos (1.555 )' PI uma constante do Basic

    area# = 2 * PI * raio ^ 2' r, a, b, c, d, e so variveis numricasr = (a + b) * (c - d / e)

    Operadores de Concatenao de Cadeias

    So usados para juntar duas ou mais cadeias de caracteres.

    Operador Usado para

    & Concatenar duas ou mais cadeias ( strings )

    + Concatenar duas ou mais cadeias ( strings )

    Exemplos:

    preNome$ = "Menino"sobreNome$ = "Maluquinho"nomeCompleto$ = preNome & " " & sobreNome

    Operadores Relacionais ( Comparao )

    So usados para comparar expresses e o resultado um Booleano, True (-1) ou False (0).

    Operador Usado para

    = As expresses so iguais ?

    As expresses so diferentes ?

    > A primeira expresso maior que a segunda ?

    < A primeira expresso menor que a segunda ?

    >= A primeira expresso maior que ou igual a segunda ?

  • 8/6/2019 programando_ooo_b

    29/120

    Verso Linguagem OpenOffice.org Basic

    Se usados com operandos Booleanos e/ou expresses Booleanas, resultam num valorBooleano. Se usados com operandos numricos, executam uma operao bit a bit, resultandonum valor numrico.

    Operador Usado para OperandosNOT Inverte o resultado booleano 1

    OR Uma das expresses TRUE ? 2

    AND Ambas as expresses so TRUE ? 2

    XOR Uma expresso TRUE e a outra FALSE ? 2

    EQV Ambas so TRUE ou ambas so FALSE ? 2

    IMP Se a 1a. for TRUE a 2a precisa ser TRUE 2

    Exemplos:'' resultado True, se as 2 expresses forem True' FIM_ARQUIVO uma constante definida anteriormenteresultado = (NrPtos < 1000 And Not FIM_ARQUIVO)'' resultado True se a 1a. ou a 2a. for True' EOF() uma funo do Basicresultado = (NrPtos < 1000 Or Not EOF())

    Para exemplos de operao bit a bit, consulte a ajuda do OOoBasic.

    Precedncia dos Operadores

    Uma expresso pode ser composta por mais de um operador. A ordem na qual estes operadores so avaliados chama-se precedncia dos operadores, da maior para a menor temos:

    ( ) Parnteses^ Exponenciaco*, / Multiplicao e divisoMod Mdulo\ Diviso inteira+, - Soma e subtrao=, , >, =,

  • 8/6/2019 programando_ooo_b

    30/120

    Linguagem OpenOffice.org Basic Verso

    2.5 Fluxo de controle da execuo

    A ordem de execuo dos comandos, numa macro, determinada pelos comandos de deciso

    (IF e SELECT CASE) e repetio (DO, FOR e WHILE) existentes no programa. Alm destes,podemos usar Labels, GOTO e GOSUB, quando estritamente necessrio.

    Comando de Deciso If ... Then ... End If

    Primeira forma do comando IF:

    If ( expresso ) Then ' Se expresso for True Ento'' Execute este bloco de comandos

    'End If Fim SeSegunda forma do comando IF (com a clusula ELSE):

    If ( expresso ) Then ' Se expresso for True Ento' Execute este bloco de comandos

    Else' Execute este bloco de comandos

    End If ' Fim SeTerceira forma do comando IF (com a clusula ELSE IF):

    If (expresso) Then ' Se expresso for True Ento

    ' Execute este bloco de comandosElseIf (expresso) Then' Execute este bloco de comandos

    Else' Execute este bloco de comandos

    End If ' Fim Se

    Em todas as formas o uso dos parnteses opcional. Podemos aninhar vrios comandos If.

    Exemplo da segunda forma do comando IF:

    If (a > b) Then ' se a for > que b, ento

    maior = a ' armazene o valor de a na variavel maiorElse ' seno

    maior = b ' armazene o valor de b na variavel maiorEnd If ' fim se

    Exemplo da terceira forma do comando IF:

    If (botao = Ok) Thenmens$ = "OK pressionado"

    ElseIf (botao = Cancela) Thenmens$ = "CANCELA pressionado"

    Elsemens$ = "AJUDA pressionado"

    End If

    28 Programando Macros para o OpenOffice.org

  • 8/6/2019 programando_ooo_b

    31/120

    Verso Linguagem OpenOffice.org Basic

    Comando de Deciso Select Case

    Forma do comando Select Case ... End Select:

    Select Case ( expresso_de_teste )Case lista_de_expresses1

    ' execute este bloco de comandosCase lista_de_expresses2

    ' execute este bloco de comandosCase Else

    ' execute este bloco de comandosEnd Select ' fim da seleo

    A instruo Select Case avalia a expresso_de_teste somente uma vez, na entrada do coman

    do, em seguida, compara seu resultado com a lista_de_expresses das clusulas Case. Se houver uma coincidncia, os comandos abaixo do Case sero executados. Os comandos de CaseElse (que opcional) sero executados se no houver nenhuma coincidncia anterior.

    A lista de expresses pode conter mais de uma expresso ou at uma faixa de valores (Ex: 10To 20), com cada expresso separada por vrgula. As expresses devem ser do mesmo tipo dedado da expresso_de_teste. Aps a execuo do bloco de comandos, o controle passa para aprxima linha depois do End Select.

    Exemplo de Select Case avaliando constantes:

    Select Case tipoDesenhoCase LINHA

    ' executa comandos para linhaCase CIRCULO

    ' executa comandos para crculoCase CURVA

    ' executa comandos para curvaCase Else

    ' avisa ao operador que o elemento invlidoEnd Select

    Exemplo de Select Case avaliando valores:

    Select Case corElementoCase 0 To 2, 6, 8 ' caso cores 0, 1, 2, 6 ou 8

    ' executa este bloco de comandosCase 3 To 5 ' caso cores 3, 4 ou 5

    ' executa este bloco de comandosCase Is > 9 ' caso cor > 9

    ' executa este bloco de comandosEnd Select

    Comando de Repetio While ... Wend

    Forma do comando While ... Wend:

    While ( expresso_de_teste ) ' enquanto expresso for True'

    Programando Macros para o OpenOffice.org 29

  • 8/6/2019 programando_ooo_b

    32/120

    Linguagem OpenOffice.org Basic Verso

    ' executa este bloco de comandos'

    Wend ' fim enquantoEste comando avalia a expresso_de_teste no incio, se o resultado for True, o bloco de co

    mandos ser executado e o controle volta para o While para uma nova avaliao da expresso.Seno o comando aps o Wend ser executado. permitido aninhar laos While ... Wend.

    Exemplo de While ... Wend:

    Sub exemplo_While_WendDim nome As StringDim nrTotal As Integer'nrTotal = 0 ' inicializa contador de nomesnome = Space( 10 ) ' inicializa varivel nomeWhile (nome "") ' incio do lao

    ' bloco de codigo do lao'nome = InputBox("Digite um nome:")If nome "" Then

    msgBox "Voc digitou: " & nomenrTotal = nrTotal + 1 ' incrementa nrTotal

    End IfWend ' fim do laoMsgBox Str$(nrTotal) + " nomes foram digitados."

    End Sub

    Neste exemplo, enquanto o operador digitar um nome o cdigo dentro do lao ser repetido.

    Comando de Repetio For ... Next

    Forma geral do comando For ... Next:

    FOR Contador = valor_inicial TO valor_final STEP valor_incremento' executa bloco de comandosIF (expresso) THEN ' para sair do lao antes do Contador atingir o valor_final

    EXIT FOR ' use o comando Exit ForEND IF ' fim se

    NEXT Contador ' aqui, Contador opcionalO comando For ... Next funciona da seguinte maneira:

    O valor_inicial atribudo varivel Contador, depois ele testa o contador com o valor_final,

    se o resultado do teste for True, os comandos dentro do lao sero executados, em seguidaContador ser incrementado com valor_incremento e um novo teste ser executado, at que seobtenha um valor False para o teste, conforme as regras:

    Para valor do incremento positivo, o teste ser True se Contador = valor_final.Se a clusula STEP for omitida o valor_incremento ser 1.

    O teste com IF deve ser usado se quisermos sair do lao antes que Contador bata com ovalor_final.

    Exemplo de For ... Next:

    30 Programando Macros para o OpenOffice.org

  • 8/6/2019 programando_ooo_b

    33/120

    Verso Linguagem OpenOffice.org Basic

    ' Inicializar um vetor de 100 elementos'Sub exemplo_For_Next

    Dim Vetor(1 To 100) As IntegerDim I As Integer

    '' para I variando de 1 a 100 com incremento 1For I = 1 To 100

    ' I usado como ndice do vetor e tambm na expressoVetor(I) = I * 2

    Next I ' vai para a prxima avaliao de I' exibe resultado da soma do 1o e ltimo elementosMsgBox Str$ ( Vetor(1) + Vetor(100) )

    'End Sub

    Aqui, definimos um vetor com 100 elementos, com o ndice inicial em 1 e o final em 100 ( sevoc no especificar o ndice inicial, o OOo Basic adota o zero ). Depois, entramos no lao e

    atribumos valores ( I * 2 ) para os elementos do vetor. Terminamos exibindo a soma dosprimeiro e ltimo elementos do vetor.

    O comando For ... Next muito eficiente e deve ser usado sempre que soubermos o nmerode repeties do lao.

    Podemos aninhar comandos For ... Next ( muito til para operaes com matrizes ).

    Comando de Repetio Do ... Loop

    Empregado para executar um bloco de comandos um nmero indefinido de vezes. Este co

    mando pode ser usado de 5 maneiras diferentes.Primeira, lao infinito:

    DO ' faa' executa bloco de comandos' teste para sair do lao, sem o teste o lao ser infinitoIF (expresso) THEN

    EXIT DO ' sai do laoEND IF

    LOOP ' retorna para o DoSegunda, teste no incio do comando com WHILE

    DO WHILE (expresso) ' faa ENQUANTO expresso for True' executa bloco de comandos

    LOOP ' retorna para o DoTerceira, teste no incio do comando com UNTIL:

    DO UNTIL (expresso) ' faa AT que a expresso seja True' executa bloco de comandos

    LOOP ' retorna para o DoQuarta, teste no final do comando com WHILE:

    DO ' faa' executa bloco de comandos

    LOOP WHILE (expresso) ' ENQUANTO expresso for True

    Programando Macros para o OpenOffice.org 31

  • 8/6/2019 programando_ooo_b

    34/120

    Linguagem OpenOffice.org Basic Verso

    Quinta, teste no final do comando com UNTIL:

    DO ' faa' executa bloco de comandos

    LOOP UNTIL (expresso) 'AT que expresso seja True

    Em todas as maneiras podemos colocar um teste no interior do lao, para abandon-lo com ocomando EXIT DO. Note que nas formas iniciadas somente com o DO, o lao ser executadopelo menos uma vez. Os Comandos Do ... Loop podem ser aninhados.

    Exemplo de Do ... Loop, com o teste da expresso no incio:

    Do While ( Not Eof() ) ' faa enquanto no for Fim de Arquivo' leia a linha' processe a linha

    Loop ' fim do lao

    Exemplo de Do ... Loop, com o teste da expresso dentro do lao:Do ' faa

    ' obtm nomePontoIf IsNull (nomePonto) Then ' se nome do ponto for nulo

    Exit Do ' saia do laoEnd If ' fim se' processa o ponto

    Loop ' fim lao

    Comandos de Desvio Incondicional

    GOTO LABEL Desvia a execuo do programa para a linha nomeada.

    ' [ bloco de comandos ]Goto Label' [ bloco de comandos ]Label:' [ bloco de comandos ]

    GOSUB LABEL ... RETURN Desvia a execuo do programa para a linha nomeada e re

    torna, para a linha seguinte ao GoSub Label, ao encontrar o comando Return.' [ bloco de comandos ]Gosub Label' [ bloco de comandos ]Label:' [ bloco de comandos ]ReturnA palavra LABEL deve ser substituda por um nome definido pelo programador. Note o sinalde dois pontos no final da linha nomeada.

    Estes comandos devem ser usados quando estritamente necessrio.

    32 Programando Macros para o OpenOffice.org

  • 8/6/2019 programando_ooo_b

    35/120

    Verso Linguagem OpenOffice.org Basic

    Comandos de Controle de Erros

    Para manter um programa sob controle, precisamos tentar antecipar os erros possveis e as

    aes a serem tomadas para contorn-los. Esta a finalidade do comando ON ERROR. Eleinicia o controlador de erros e pode ser usado de vrias maneiras.

    On Error Goto Label => em caso de erro desvia para a linha nomeada.On Error Goto 0 => desativa o controlador de erros e continua a execuo.On Error Resume Next => desativa o controlador e continua a execuo na linha seguinte

    a que gerou o erro.On Error Resume Label => desativa o controlador e continua a execuo na linha nomeada.Resume Next | Label => podem ser usados isoladamente no bloco de controle de erros.A palavra Label, deve ser substituida por um nome definido pelo programador.

    Aps a ativao do controlador, podemos obter informaes sobre o erro, atravs de trs var

    iveis globais:Err => retorna o nmero do erro.Erl => retorna a linha de cdigo que provocou o erro.Error$ => retorna uma descrio sucinta do erro.

    A escrita de cdigo para tratamento de erros no uma tarefa trivial. Como regra geral, procure ativar e desativar o controlador de erros dentro das rotinas e no globalmente. Veja, aseguir, um trecho de cdigo seguindo esta estratgia.

    Sub exemplo_OnError' Em caso de erro salta para a' linha tratamentoDeErros:On Error Goto tratamentoDeErros'' aqui vem o cdigo da rotina'MsgBox "Ufa! Nenhum erro."'' desativa o controlador de errosOn Error Goto 0' sai da rotinaExit Sub

    '' cdigo de tratamento de errostratamentoDeErros:

    MsgBox "Erro: " & Error$' desativa o controlador de errosOn Error Goto 0

    End Sub

    Note que temos dois pontos de sada da rotina (Exit Sub e End Sub) e, antes deles, desativamos o controlador de erros com o comando On Error Goto 0.

    2.6 Tipos de dados avanados

    Alm dos tipos de dados bsicos, o OOoBasic tem recursos para operaes com vetores e

    tipos de dados definidos pelo usurio, que so estruturas de dados mais especializadas.

    Programando Macros para o OpenOffice.org 33

  • 8/6/2019 programando_ooo_b

    36/120

    Linguagem OpenOffice.org Basic Verso

    Vetores

    Um vetor (ou matriz) contm um grupo de variveis com caractersticas comuns e com o mes

    mo tipo de dado. Com uma matriz podemos usar um s nome de varivel e acessar os valoresde um elemento usando um ndice. Uma matriz tem um limite inferior e um limite superiorem cada dimenso. Os ndices so valores inteiros (negativos ou positivos).

    A declarao de uma matriz pode ser feita com a instruo DIM

    DIM nome_vetor (numero_elementos) AS tipo_dadoDIM nome_matriz (nr_linhas, nr_colunas) AS tipo_dado

    Os elementos da matriz so referenciados atravs dos seus ndices. Por padro, os ndicescomeam em zero.

    Seguem alguns exemplos de emprego de matrizes:Dim nomeDePonto (30) AS String 'Vetor para 31 nomes de pontos (0 a 30)Dim coordPonto3D# (30, 2) ' Matriz de 2 dimenses com 31 linhas e

    ' 3 colunas (X, Y e Z) do tipo Double' Atribuindo valoresnomeDePonto(0) = "Ponto01" ' atribui a cadeia ao 1o. elemento do vetornomeDePonto(30) = "Ponto31" ' atribui a cadeia ao ltimo elemento do vetor' Acessando valorescoordX = coordPonto3D(9,0) ' obtm o valor da linha 10, coluna 1coordY = coordPonto3D(9,1) ' obtm o valor da linha 10, coluna 2coordZ = coordPonto3D(9,2) ' obtm o valor da linha 10, coluna 3

    Os ndices inferior e superior podem ser definidos com a clusula TO, por exemplo:

    Dim sNomes$(1 To 30) ' Declara vetor para 30 (1 a 30) nomesDim matrizA%(1 To 5, 1 To 3) ' Declara matriz de 5 linhas X 3 colunas

    Podemos declarar uma matriz cujo tamanho ser determinado posteriormente.

    Dim nomePonto$( ) ' Declara um vetor de tamanho desconhecidoAps conhecer o nmero de pontos, podemos redimensionar o vetor com REDIM:

    NumeroPontos = 100Redim nomePonto(numeroPontos) 'redimensiona o vetor para 101 nomes (0 a 100)REDIM apaga o contedo do vetor, se quisermos aumentar o tamanho do vetor preservando oseu contedo, devemos usar a clusula PRESERVE, veja abaixo:

    REDIM PRESERVE nomePonto(200) ' aumenta de 100 para 200 conservando o contedo

    Vetores e matrizes so estruturas de dados apropriadas para uso com as instrues derepetio (laos), sendo que a mais adequada For ... Next. Vejamos um exemplo que somaduas matrizes 3x3.

    Sub somaMatrizes' declara as matrizes 3x3Dim m1(2,2) As IntegerDim m2(2,2) As IntegerDim soma(2,2) As Integer

    ' inicializa as matrizes m1 e m2

    34 Programando Macros para o OpenOffice.org

  • 8/6/2019 programando_ooo_b

    37/120

    Verso Linguagem OpenOffice.org Basic

    For i = 0 To 2For j = 0 To 2

    m1(i,j) = i * jm2(i,j) = m1(i,j) * m1(i,j)

    Next j

    Next i' soma m1 e m2 (poderia ser no lao anterior)For i = 0 To 2

    For j = 0 To 2soma(i,j) = m1(i,j) + m2(i,j)

    Next jNext i' exibe o ultimo elemento de cada matrizprint m1(2,2); m2(2,2); soma(2,2)

    End Sub

    Vetor de vetores

    Nesta estrutura de dado, um vetor armazena outros vetores, que podem ter tipos de dados etamanhos diferentes. Observe o esquema abaixo:

    vetor(0)

  • 8/6/2019 programando_ooo_b

    38/120

    Linguagem OpenOffice.org Basic Verso

    ' exibe os elementos do vetor secundrioMsgBox msg

    Next iEnd Sub

    As funes LBound e UBound retornam os limites inferior e superior de um vetor.

    Tipo de dado definido pelo usurio

    Esta estrutura permite a definio de um tipo de dado composto por campos. Assemelha-se aum registro de uma tabela.

    A criao de um novo tipo de dado feita com a instruo TYPE ... END TYPE, fora de qualquer procedimento, como a seguir:

    TYPE novo_tipo

    campo1 AS campo2 AS campo3 AS ...campoN AS

    END TYPENo podemos ter um vetor como um campo de dado.

    Aps a definio do tipo, usamos o comando DIM para criar variveis deste tipo.

    DIM meu_registro AS novo_tipoDIM meus_dados(100) AS novo_tipo

    O acesso aos campos se d com o uso do operador. (ponto).

    meu_registro.campo1 = valorminha_var = meu_registro.campo2meus_dados(10).campo3 = valor3O operador . (ponto) ser bastante utilizado com os objetos da API do OOo.

    Como um exemplo prtico, suponha que vamos registrar dados sobre clientes. Os dados so:

    nome da pessoa: tipo String com tamanho 40nascimento: tipo String com tamanho 8

    altura: tipo Singlepeso: tipo SingleComo temos diversas pessoas poderiamos usar vetores para manipular os dados, mas nestecaso, eles seriam tratados separadamente. Ento, prefervel criar um tipo de dado contendotodos os campos e, em seguida, criar um s vetor deste tipo de dado.

    Veja uma possvel soluo:

    ' cria um novo tipo de dadoType Cliente

    ' declara os camposnome AS String*40nasc AS String*8

    36 Programando Macros para o OpenOffice.org

  • 8/6/2019 programando_ooo_b

    39/120

    Verso Linguagem OpenOffice.org Basic

    peso AS Singlealtura As Single

    End Type

    Sub tipoDefinidoUsuario

    ' declara uma varivel para o clienteDim meuCliente As Cliente' inicializa o registromeuCliente.nome = "Regina Cavalcante"meuCliente.nasc = "10/05/85"meuCliente.peso = 61meuCliente.altura = 1.72' exibe dadosprint meuCliente.nome; meuCliente.peso

    End Sub

    A declarao do tipo feita fora da rotina e o acesso aos campos usa o operador ponto. Tambm, note a declarao de uma cadeia de comprimento fixo.

    Programando Macros para o OpenOffice.org 37

  • 8/6/2019 programando_ooo_b

    40/120

  • 8/6/2019 programando_ooo_b

    41/120

    Verso Organizao do Programa OOoBasic

    Exemplo de sub-rotina que troca os valores de duas variveis:

    SUB TrocaValores ( valor1 As Double, valor2 As Double)'

    Dim temp As Double

    'temp = valor1valor1 = valor2valor2 = temp' Note que apesar de no retornar valores, as variveis passadas' como parmetros foram alteradas e estas alteraes sero' visveis na rotina que chamar TrocaValores

    'END SUB

    Agora vamos escrever uma macro que chama a rotina TrocaValores:

    Sub testeTrocaValores' declara as variaveis

    Dim a As Double, b As Double' atribui valoresa = 1111.11 : b = 2.22print a; b' chama a rotina troca valoresTrocaValores ( a, b )' mostra o resultadoprint a; b

    End Sub

    O comando EXIT SUB pode ser usado dentro de uma sub-rotina para abandon-la imediatamente.

    3.3 Funes

    A definio de uma funo feita entre os comandos FUNCTION ... END FUNCTION,como abaixo:

    FUNCTION NomeFuncao (ListaParametros) As TipoRetornado

    ' declarao das variveis locais' comandos da funo

    NomeFuncao = expresso_Retorno ' NO ESQUEA!END FUNCTIONNote que uma funo retorna o valor de uma expresso numa varivel de nome igual ao nomeda funo.

    O comando EXIT FUNCTION pode ser usado dentro de uma funao para abandon-la imediatamente.

    Exemplo de uma funo que calcula o volume de uma esfera, a partir do seu raio:

    FUNCTION VolumeEsfera ( raio As Double ) As DoubleDim diametro As Double

    '

    Programando Macros para o OpenOffice.org 39

  • 8/6/2019 programando_ooo_b

    42/120

    Organizao do Programa OOoBasic Verso

    diametro = 2 * raioVolumeEsfera = (PI / 6) * diametro ^ 3' NOTE: nome da funo VolumeEsfera; nome da varivel: VolumeEsfera

    END FUNCTION

    Sub testeVolumeEsferaDim r As Doubler = 5volume = VolumeEsfera( r )print "Volume: "; volume

    End Sub

    3.4 Passagem de Parmetros

    A passagem de parmetros para sub-rotinas e funes pode ser feita de duas maneiras, porreferncia (padro) ou por valor. Quando um parmetro (varivel) passado por referncia,qualquer alterao em seu contedo ser refletida na rotina chamadora. Se a passagem for porvalor, as alteraes na varivel sero descartadas quando o procedimento terminar a sua execuo e o valor original ser preservado. Matrizes so passadas por referncia.

    Para passar um parmetro por valor, na definio do procedimento, use a palavra BYVAL,antes do nome do parmetro, ou, se BYVAL omitida, coloque a varivel entre parnteses, nachamada, veja abaixo:

    SUB ImprimePonto (BYVAL cadeia$, X#, Y#)

    cadeia = Ltrim$(Rtrim$(cadeia) + ", " + Str$(X) + ", " + Str$(Y)

    Print cadeia' a mudana em cadeia, ser descartada no trmino da Sub

    END SUB

    Com relao aos parmetros, existe, ainda, a questo da obrigatoriedade ou no da passagem.Se declarados normalmente eles so obrigatrios, se declarados com o comando OPTIONALa passagem opcional. Veja abaixo uma modificao da declarao anterior.

    SUB ImprimePonto (BYVAL cadeia$, Optional X, Optional Y)' agora os parmetros X e Y so opcionais' use a funo IsMissing para verificar se foi passado ou no

    If IsMissing(X) ThenMsgBox "X no foi passado"End If' outros comandos

    END SUB

    40 Programando Macros para o OpenOffice.org

  • 8/6/2019 programando_ooo_b

    43/120

    Verso Organizao do Programa OOoBasic

    3.5 Escopo das variveis

    O escopo tem a ver com a visibilidade de uma varivel dentro da macro, ou seja, os lugares da

    macro onde esta varivel pode ser referenciada. Quanto ao escopo, uma varivel pode ser local, pblica ou global, conforme a sua declarao.

    Quando for declarada, de modo explcito ou no, dentro de uma sub-rotina ou funo ela servisvel apenas dentro da sub-rotina ou funo, sendo portanto local.

    Ser pblica quando declarada fora de qualquer sub-rotina ou funo com os comandos PUBLIC, neste caso ela ser visvel por todos os procedimentos em todas as bibliotecas, mas seuvalor ser conservado apenas durante a execuo da macro. As variveis declaradas com DIMou PRIVATE deveriam ser visveis apenas no mdulo, mas elas se comportam como uma varivel pblica.

    Se for declarada fora de uma sub-rotina ou funo com o comando GLOBAL, ela ser visvelpor todas as rotinas de todas bibliotecas e, ainda, preserva o seu valor aps o trmino da execuo da macro.

    Para entender os conceitos, analise o cdigo abaixo, execute a macro exemploEscopo e, logoaps, a macro testaGlobal:

    ' visivel em todas as bibliotecas, preserva' o valor entre as chamadasGlobal varGlobal As Integer' visiveis em todas as bibliotecas, no preserva o valorPublic varPublica1 As IntegerDim varPublica2 As Integer

    Sub exemploEscopoinicializaVariaveis' varLocal visivel apenas nesta rotina' declarao implcita e no inicializadaprint "varLocal em exemploEscopo: "; varLocalprint "varGlobal: "; varGlobalprint "varPublica1: "; varPublica1print "varPublica2: "; varPublica2

    End Sub

    Sub inicializaVariaveis' varLocal visivel apenas nesta rotinaDim varLocal As IntegervarLocal = 1varGlobal = 2varPublica1 = 3varPublica2 = 4print "varLocal em inicializaVariaveis: "; varLocal

    End Sub

    Sub testaGlobal' varGlobal preserva o valorprint "varGlobal: ";varGlobal' varPublica1 perde o valorprint "varPublica1: "; varPublica1

    End Sub

    A declarao de uma varivel pblica ou global deve ser feita fora de qualquer sub-rotina oufuno do mdulo, procure declar-las no incio do mdulo.

    Programando Macros para o OpenOffice.org 41

  • 8/6/2019 programando_ooo_b

    44/120

    Organizao do Programa OOoBasic Verso

    As variveis locais existem apenas enquanto a sub-rotina ou funo, na qual elas foramdeclaradas, so executadas. Para contornar esta limitao, existem as variveis estticas. Apesar de locais, elas preservam o valor entre chamadas da rotina e so declaradas com o comando STATIC como abaixo:

    ' declarao de varivel estticaStatic varEstatica As Integer

    3.6 Chamada de Procedimentos

    A chamada a um procedimento depende do seu tipo, se sub-rotina ou funo e, ainda, da sualocalizao. Como uma sub-rotina no retorna valores, ela no precisa ser usada como partede uma expresso. J uma Funo sempre retorna um valor, logo deve ser usada numa ex

    presso.

    Procedimentos na mesma biblioteca

    Formas de chamadas de sub-rotina:

    ' Usando o comando CALL com ou sem parntesesCALL ImprimePonto (nomePonto, coordX, coordY)CALL ImprimePonto nomePonto, coordX, coordY' Sem o comando CALL, com ou sem parnteses.

    ImprimePonto (nomePonto, coordX, coordY)ImprimePonto nomePonto, coordX, coordYSe a sub-rotina no tiver parmetros no preciso usar os parnteses.

    Formas de chamada de funes:

    ' chama a funo areaCirculo e armazena o valor da area na variavel areCircareCirc = areaCirculo (raio)' chama 2 funcoes, areaCirculo ( ) e Str$ ( ) o valor retornado ser atribudo a cadeiacadeia = Str$( areaCirculo ( raio ) )' chama 2 funcoes, Sqr ( ) e Distancia ( ) o valor retornado ser atribudo a raizDistraizDist = Sqr ( Distancia ( x1, y1, x2, y2) )

    Exemplo de chamadas de sub-rotinas e funes:

    Sub chamadaProcedimentosCall UneCadeiasSub ("Meu ", "exemplo sub 1")Call UneCadeiasSub "Meu ", "exemplo sub 2"UneCadeias