Use uma função Python como fórmula nas células do LibreOffice Calc

1

Como o LibreOffice Calc suporta macros, e as funções incorporadas são um pouco limitadas, eu gostaria de escrever minhas próprias funções em Python e usá-las como fórmulas em células individuais. Idealmente, eu teria um arquivo Python como:

def VOL(a, b, c):
    v = a*b*c
    return v

incorporado no documento ou como um arquivo custom_functions.py em um local simples. Eu então seria capaz de escrever =VOL(A1, A2, B3) em uma célula e calcular o resultado. Entrada incorreta ou outros erros devem produzir um texto de erro na célula, da mesma forma que as funções de cálculo embutidas fazem.

Eu posso ir para o > Macros > Organize macros ... > LibreOffice Basic. Isso me dá um diálogo onde eu aparentemente posso criar uma nova função da maneira que eu descrevo acima (eu não testei). Infelizmente, isso parece exigir que seja escrito no Basic, não no Python. Eu realmente não quero aprender Basic apenas para isso, quero aproveitar meu conhecimento e experiência em Python.

Se eu for para Ferramentas > Macros > Organize macros ... > Python, as opções para criar novas macros estão esmaecidas. Depois de cavar um pouco na internet, descobri que aparentemente o LibreOffice (bem, na verdade o OpenOffice upstream) não tem seu próprio IDE do Python "ainda", então eles colocam um botão na interface do usuário sem explicação como um espaço reservado. Eu digo "ainda" entre aspas porque eu encontrei pessoas reclamando sobre isso em 2012 apenas para ser informado de que ele será corrigido a qualquer momento.

Também encontrei algumas informações sobre como escrever extensões do Python usando algum tipo de biblioteca de interoperabilidade do Python. Isso parece exigir a importação de muitas bibliotecas pesadas, até mesmo os exemplos mais básicos exigem dezenas de linhas de código clichê complexo, e a depuração é provavelmente uma dor. Seria muito mais fácil escrever um script Python normal que lê dados da planilha e, em seguida, escreve de volta. No entanto, as funções que eu quero são relativamente triviais e poder ver e navegar de forma eficaz nos dados é muito útil para desenvolver e depurar minha análise exploratória, de modo que ser capaz de definir a função em Python simples e usá-la dentro de uma planilha do Calc seria muito conveniente. Existe uma maneira de fazer isso?

Eu estou no LibreOffice 5.2.2.2 e no Windows 7, eu posso usar o Python 2 ou 3, mas prefiro 3.

    
por Superbest 21.02.2018 / 21:35

1 resposta

1

Algumas coisas que você perguntou são facilmente resolvidas, outras nem tanto. Primeiro de tudo, o IDE. APSO é uma extensão que agora está pronta para uso e fornece um menu conveniente para editando macros em Python.

Depois de instalado, vá para Ferramentas - > Macros - > Organize scripts python . Expanda My Macros e vá para Menu - > Criar módulo . Nomeie-o como "custom_functions.py".

Em seguida, selecione o arquivo e vá para Menu - > Editar . Para que isso funcione, você precisará entrar em Ferramentas - > Gerenciador de extensões e diga ao APSO o caminho para o seu editor de texto favorito. O meu está definido para C:\Program Files (x86)\Vim\vim80\gvim.exe .

No editor de texto, digite o seguinte código.

def VOL(a, b, c):
    v = a*b*c
    return v

def call_vol():
    oSheet = XSCRIPTCONTEXT.getDocument().getSheets().getByIndex(0)
    cell_a = oSheet.getCellRangeByName("A1")
    cell_b = oSheet.getCellRangeByName("A2")
    cell_c = oSheet.getCellRangeByName("A3")
    cell_result = oSheet.getCellRangeByName("B1")
    cell_result.setValue(
        VOL(
            cell_a.getValue(),
            cell_b.getValue(),
            cell_c.getValue()))

g_exportedScripts = call_vol,

Para executar o código, use o APSO novamente ou vá para o Ferramentas - > Macros - > Execute Macro. Encontre e execute a função call_vol . Por exemplo, se A1 a A3 contiverem 2, então isso produzirá 8 em B1 porque 2 * 2 * 2 = 8.

Agora, como transformar essa macro em uma função de planilha? A maneira correta é criar um suplemento de planilha . Eu descobri que tais funções funcionam bem, mas requer vários arquivos de configuração XML, e parece que você quer evitar isso.

A alternativa para criar suplementos é uma função definida pelo usuário . Estes só podem ser chamados quando escritos em Basic.

Para uma UDF em que o trabalho principal é feito em Python, coloque uma função de invólucro no Basic que chama o Python do Basic usando o Provedor de Script.

No Windows, as versões recentes do LibreOffice geralmente vêm com o Python 3. O Apache OpenOffice vem com o Python 2.

    
por 22.02.2018 / 14:18