Macro em Python no Calc?

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!!

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:
Release Zipped, ready-to-go LibreOffice extension file · jsbueno/librepylot · GitHub - 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 a planilha ou a célula com as fórmulas é recalculada. (Mas atenção: se seu código Python fizer referência a outras células, quando essas forem alteradas, o código não é executado automaticamente - você deve editar a célula com o código, ou com a instrução Pyexec). Planilhas salvas e recarregadas tem às fórmulas de Python nas próprias células - portanto não é preciso se preocupar com gravar os arquivos em algum lugar.

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!

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!!

@jsbueno, Super Interessante e de infinidade de usos, qual possibilidade de apresentar esta extensão na Revista LibreOffice (Página da Revista LibreOffice Magazine - The Document Foundation Wiki), através de um Artigo. A Revista necessita de colaboradores, e se criativos melhor ainda, mais detalhes entre em contato redacao@libreoffice.org

@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.