2
respostas

Interface Python para Execução de Rotina

Olá, minha dúvida é a seguinte: Preciso fazer com que uma tabela de excel, execute uma rotina em python por meio de um botão executar. É possivel fazer isso com auxilo de VBA? A rotina em python leria os inputs da tabela e devolveriam gráficos e valores. Se não for possivel, existe uma forma melhor de fazer um interface para usuário? Alguma forma de criar uma tabela pelo python átraves do Tkinter, talvez, onde o usuario daria input e executaria a rotina sem precisar interagir com idle do python.

2 respostas

Sobre o VBA, não vou saber te responder, mas...

É possivel criar tabelas usando o python utilizando o modulo openpyxl com função de workbook ou manipular uma tabela utilizando a função load_workbook.

from openpyxl import load_workbook, workbook

Eu mesmo já apliquei em uma interface com ajuda do Tkinter e transformei o script em um arquivo executável, para não precisar interagir com a idle, esse link leva para um post que fiz disponibilizando meus conteudos de estudo, nele tem uma pasta chamada python que ajuda a criar um executavel e um instalador para seu script link.

Minha dica pessoal é que faça um arquivo padrão, excel, com tudo que você quer que a planilha faça, crie uma copia com ajuda do openpyxl e do tkinter (filedialog) e preencha os campos usando o load_workbook.

from tkinter import filedialog

Qualquer duvida, basta responder esse post.

Você tem algumas opções:

  • O VBA pode chamar um script python, mas este script será um processo separado, sem acesso à planilha Excel que chamou ele. Você pode fazer a chamada de duas formas:

    • Usando a função Shell do VBA. A desvantagem desta função é que ela é Assincrona. O VBA chama o programa e continua a execução, sem esperar o final da execução.
    • Uma alternativa é usar a função ShellAndWait disponível neste link: http://www.cpearson.com/Excel/ShellAndWait.aspx. Ela te dá mais opções ao chamar um script externo. Eu utilizo esta solução para chamar um script e este script salvar um arquivo CSV que depois é importado pela macro.
  • Outra opção é fazer o python trabalhar com o Excel, reaproveitando suas macros. Faço isso fazendo o python chamar o excel através da interface COM. Recomendo este link: https://pbpython.com/windows-com.html. Com a interface COM você basicamente chama o código VBA de dentro do python (ou do PHP).

O exemplo abaixo veio do link indicado. Pra quem já trabalhou com VBA, dá pra perceber que ele está utilizando códigos VBA.

# Use com to copy the files around
excel = win32.gencache.EnsureDispatch('Excel.Application')
excel.Visible = False
excel.DisplayAlerts = False

# Template file
wb_template = excel.Workbooks.Open(template_file)

# Open up the data file
wb_data = excel.Workbooks.Open(data_file)

# Copy from the data file (select all data in A:D columns)
wb_data.Worksheets("Data").Range("A:D").Select()

# Paste into the template file
excel.Selection.Copy(Destination=wb_template.Worksheets("Data").Range("A1"))

# Must convert the path file object to a string for the save to work
wb_template.SaveAs(str(save_file))

Qualquer dúvida, é só avisar!