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.