Como criar e executar uma macro no LibreOffice Calc no Linux

O LibreOffice é a resposta do mundo FOSS ao pacote principal e proprietário do Microsoft Office. Desenvolvido pelos principais desenvolvedores e colaboradores de software de produtividade do Office, ele oferece uma substituição completa para o Microsoft Office em vários sistemas operacionais.

O aplicativo LibreOffice equivalente ao Microsoft Excel é chamado de LibreOffice Calc. Ele vem com vários recursos e uma interface semelhante ao Excel. Possui um mecanismo de macro embutido para desenvolver e executar macros para automação. No entanto, ele não oferece suporte a Visual Basic, mas oferece suporte a seu próprio idioma; LibreOffice Basic, para programação de macros.

O pacote LibreOffice vem pré-instalado na maioria das distribuições Linux, incluindo Ubuntu, Debian, Fedora e CentOS.

Criando e executando uma macro no LibreOffice Calc

Primeiro, vamos criar uma planilha com alguns dados de amostra.

Para abrir o organizador Macros, vá para Ferramentas »Macros» Organizar macros »Noções básicas do LibreOffice. Vai abrir o Macros do LibreOffice Basic janela conforme mostrado na imagem abaixo.

Insira um novo nome para a macro e, a seguir, clique no botão Novo no lado inferior direito da janela.

Agora você deve ver a tela do editor de macros no LibreOffice Basic.

Como podemos ver, as macros criadas manualmente são, por padrão, criadas em “Minhas macros e caixas de diálogo -> Padrão -> Módulo1”.

Atualmente, existem duas macros presentes: Uma é Principal, que é uma macro vazia padrão, e outra é teste, a macro que criamos acima. Agora vamos aprimorar a macro de teste.

Nossa macro fará as seguintes tarefas:

  • Verifique se todas as pessoas têm profissão de escritor
  • Crie uma nova planilha
  • Mova todas as entradas para escritores em uma nova planilha

A seguir está nossa macro:

Subteste rem Mover entradas com profissão Escritor para a nova planilha dim crs (8) como objeto dim j como inteiro dim prof como objeto dim i como Inteiro dim sh como objeto dim sh2 como objeto sh = ThisComponent.Sheets (0) crs (0) = sh.getCellRangeByPosition (0, 0, 3, 0) j = 1 para i = 1 a 5 x = 1 prof = sh.GetCellByPosition (3, i) rem Armazena a linha completa na variável Se prof.string = "Escritor" Então crs (j) = sh.getCellRangeByPosition (0, i, 3, i) j = j + 1 End If next i rem Agora crie uma nova planilha e escreva esses dados lá ThisComponent.Sheets.insertNewByName ("Writers", 1) sh2 = ThisComponent.Sheets (1) i = 0 Do While not IsNull (crs (i)) sh2range = sh2.getCellRangeByPosition (0, i, 3, i) sh2range.setDataArray (crs (i) .getDataArray) i = i + 1 Loop End Sub

Deixe-me explicar a macro acima seção por seção.

Subteste. . . End Sub

teste é o nome da nossa macro, portanto, no código, é denotado como Subteste (sub = sub-rotina). Da mesma forma, terminamos este código de macro com a instrução End Sub. Observe que essas instruções são adicionadas automaticamente quando criamos uma macro a partir do menu, embora o usuário possa escrever diretamente o código da macro aqui e o nome da subrotina será considerado como nome da macro.

rem 

Todos os comentários no LibreOffice Basic começam com a palavra-chave rem. Uma linha completa começando com rem é considerada um comentário. Outra maneira é usar ' (vírgula invertida simples) no início da linha.

dim crs (8) como dim j do objeto como dim prof. inteiro como dim i do objeto como dim sh inteiro como dim sh2 do objeto como objeto

Esta é uma declaração de variável no LibreOffice Basic. A sintaxe geral é escurecer como . Para declarar uma matriz, use uma sintaxe semelhante à variável crs, onde 8 é o comprimento da matriz.

sh = ThisComponent.Sheets (0) crs (0) = sh.getCellRangeByPosition (0, 0, 3, 0) j = 1

ThisComponent refere-se ao documento atual. Neste caso, é uma planilha do Calc. Carregamos a Planilha com índice 0, ou seja, a primeira planilha, na variável sh. Também existem funções para carregar uma folha usando o nome.

Em seguida, chamamos a função getCellRangeByPosition do objeto sh e carregue-o no array crs. Intervalo de células refere-se a um grupo de células na planilha com base na posição.

Observe que os argumentos, 0, 0 (coluna 0, linha 0) denotam a célula inicial do intervalo, e 3, 0 (coluna 3, linha 0) denotam a célula final do intervalo. Por isso 0, 0, 3, 0 refere-se à primeira linha (cabeçalho) de nossa planilha de amostra.

para i = 1 a 5 x = 1 prof = sh.GetCellByPosition (3, i) rem Armazena a linha completa na variável If prof.string = "Writer" Então crs (j) = sh.getCellRangeByPosition (0, i, 3, i ) j = j + 1 End If next i

Nós usamos um por instrução para percorrer as linhas. O por bloco termina com um Next instrução, que incrementa a variável i no final de cada iteração.

Em seguida, chamamos uma função GetCellByPosition do objeto sh. Nós passamos parâmetros (3, i), ou seja, com cada iteração, o objeto da célula na coluna 3 e linha i é recuperado na variável prof.

Então usamos um Se declaração para verificar se o valor na célula prof é “Writer”. Se for, chamamos novamente a função getCellRangeByPosition, desta vez, com eu no lugar do número da linha inicial e final. Novamente, nós o armazenamos no array crs.

ThisComponent.Sheets.insertNewByName ("Writers", 1) sh2 = ThisComponent.Sheets (1)

Primeiro, criamos uma nova planilha com o nome Escritoras, na posição 1, que é a 2ª posição, pois o índice começa em 0. Então, obtemos um objeto dessa planilha recém-criada, para que possamos inserir os dados dos escritores nesta planilha.

i = 0 Do While not IsNull (crs (i)) sh2range = sh2.getCellRangeByPosition (0, i, 3, i) sh2range.setDataArray (crs (i) .getDataArray) i = i + 1 Loop

O Fazer enquanto A instrução loop é usada quando queremos fazer um loop com base nas condições, ao contrário de um loop em uma faixa de valores inteiros, para os quais use por como mostrado anteriormente. Aqui, nós fazemos loop até crs (i) não é nulo.

Em seguida, chamamos novamente getCellRangeByPosition de maneira semelhante a antes para obter um objeto de intervalo na nova planilha.

Finalmente, chamamos duas funções: getDataArray que retorna os dados de crs (i), isto é, uma linha de dados (sobre um escritor) da primeira folha; e gravamos esses dados no intervalo de células em uma nova planilha usando setDataArray.

Finalmente, salve a macro de Arquivo »Salvar tudo opção.

Para executar a macro, vá para Ferramentas »Macros» Executar macro e selecione sua macro no diretório "Minhas macros" na Biblioteca do seletor de macros. Clique no Corre depois de selecionar um nome de macro.

Executar a macro acima em nossa planilha de exemplo produz o seguinte resultado.

Esta é a forma de criar macros no LibreOffice. Para obter mais informações e opções, consulte a documentação oficial.

? Felicidades!