Pergunte aqui
2

Macro em Python no Calc?

perguntadas 2015-10-23 16:29:59 +0200

imagem do gravatar de Beto

updated 2018-04-16 20:02:04 +0200

Estou tentando aprender aplicar python. Como eu faço para colocar uma macro python num arquivo do libreofficeCalc.

Suponhamos que a palavra "catdogfrog" estivesse na célula B4 do arquivo e as quisesse separar a exemplo da função já existente no Calc, seria:

=EXT.TEXTO(B4;1;3) retornando "cat"
=EXT.TEXTO(B4;4;3) retornado "dog"
=EXT.TEXTO(B4;7;4) retornado "frog"

Em Python ficaria assim:

animals = "catdogfrog"
cat  = animals[:3]   # Os tres primeiros caracteres de animals
dog  = animals[3:6]  # O quarto ate sexto caracteres
frog = animals[6:]   # A partir do setimo caractere ate o final

print (dog, frog)

Uma macro na linguagem Python, para o Calc como seria escrita? E eu a salvaria onde para poder para poder aplicá-la?

Obrigado!!

editar alterar tag assinalar como ofensivo fechar mesclar Excluir

1 Resposta

5

respondidas 2015-10-26 04:31:05 +0200

imagem do gravatar de jsbueno

updated 2015-10-26 04:31:37 +0200

Oi Beto - Infelizmente, apesar do LibreOffice suportar macros em Python desde há muito tempo, nunca conseguiram colocar um esforço significativo em simplificar a forma de criar essas macros e documentar melhor o seu uso.

Visando tentar criar algo bem legal que pudesse permitir a um usuário comum usar todo o poder da linguagem Python de dentro do Calc, eu criei no ano passado o projeto "LibrePylot" -

Ele é instalável na forma de uma extensão so LibreOffice - e e torna disponível duas novas formulas para a planilha "pyeval" e "pyexec": Uma permite processar direto uma experssão em Python, e retorna o seu resultado. A outra pode executar todo um programa de Python (em geral colocado em uma outra célula).

Para instalar - vá nesse link: https://github.com/jsbueno/librepylot... - baixe o arquivo "librepylot.oxt" - e, com o Calc aberto, vá em Tools->Extension Manager ("Ferramentas-> Gerenciador de extensões" eu suponho, mas o meu está em inglês).

A partir daí vocẽ pode escrever qualquer código Python numa célula - tomando cuidado para o Calc não trocar suas minúsclas em maiúsculas, nem suas aspas comums - " em aspas tipográficas (A recomendação é desligar a substituição nas opções do Calc)

Vocẽ pode escrever código arbitrário de Python em uma única célula, digamos a "A1" como texto comum (Use ctrl+enter ao editar a célula para mudar de linha sem encerrar a edição). A extensão disponibiliza um objeto especial, de nome S que representa o documento aberto no Python - você pode usar índices do Python para ler o conteúdo de outras células da planilha,e para escrever seu conteúdo.

Por exemplo: S[0]["A2"].formula" te dá acesso ao conteúdo bruto da célula A2 na 1ª planilha (sheet). Dentro do seundo colchete, você tanto pode usar o nome em texto das células, como coordenadas numéricas: S[0][0,0] referência a célula "A1" (cuidado que quando usados como coordenadas, o número da linha é 1 menor do que a linha da planilha, por que em Python (e outras linguagens) a contagem se inicia no 0).

Então, para algo parecido com o seu exempl, você poderia escrever "catdogfrog" na célula "A1", na célula A2 escrever isso (O conteúdo é visto pelo calc como texto comum. Cuidado para evitar substituições automáticas):

palavra = S[0]['A1'].formula
S[0]['B1'] = palavra[0:3]
S[0]['C1'] = palavra[3:6]
S[0]['D1'] = palavra[6:]

E na célula "A3" coloque a fórmula =PYEXEC(A2) - e você verá os resultados serem colocados nas outras células. Perceba que a coisa legal do LibrePylot é justamente poder colocar código Python tão complexo quanto se queira que escreve sua saída em _outras_ células da planilha - algo que não é possível com as fórmulas normais do Calc. Ademais, a linguagem python está disponível na integra para um programa escrito numa célula: você pode ler e escrever arquivos, acessar bancos de dados, acessar a internet (através da biblioteca urllib do Python), etc...

Usuários com a extensão instalada tem suas expressões/programas de Python executados toda vez que ... (mais)

editar assinalar como ofensivo Excluir Link mais

Comentários

Prezado, João, muito obrigado! Vou testar seu projeto, que adivinho ser excelente! De acordo com meu tempo disponível (e aprendizado) vou experimentando e volto a comentar aqui. Para mim, de qualquer maneira a resposta é ótima!

imagem do gravatar de BetoBeto ( 2015-10-26 12:21:07 +0200 )editar

Testei há pouco achei muito legal, realmente ao mudar a palavra automaticamente na célula ele não reaplica o código é necessário gravar e fechar o arquivo. Neste sentido achei uma pena não fazer, mas tenho certeza que tenho muito a descobrir ainda na sua extensão. Parabéns muito bom, mesmo!!

imagem do gravatar de BetoBeto ( 2015-10-26 15:16:28 +0200 )editar

@jsbueno, Super Interessante e de infinidade de usos, qual possibilidade de apresentar esta extensão na Revista LibreOffice (https://wiki.documentfoundation.org/M...), através de um Artigo. A Revista necessita de colaboradores, e se criativos melhor ainda, mais detalhes entre em contato redacao@libreoffice.org

imagem do gravatar de Gilberto SchiavinattoGilberto Schiavinatto ( 2016-02-03 00:06:34 +0200 )editar
1

@Beto, no tempo do BrOffice, na Revista BrOffice ZINE, ( nos. 3, 4, 6 e 20) saíram artigos relacionados ao Python. Com os seguintes títulos: PyUNO e as macros Python / PyUNO e as caixas de diálogo / Extensões Python e a última que prometia mas detalhes foi, Incorporando macros Python aos arquivo ODF. Caso não encontre na internet me envie seu e-mail que mando os links.

imagem do gravatar de Gilberto SchiavinattoGilberto Schiavinatto ( 2016-02-03 00:48:27 +0200 )editar
Login/Registrar para responder

Ferramentas de perguntas

1 seguidor

Estatísticas

Perguntadas: 2015-10-23 16:29:59 +0200

Lidas: 2,571 vezes

Última atualização: Apr 16 '18