Automação VBA e Python para Excel e MS Office

O motivo da nota foi um artigo sobre Habré, no qual o autor descreveu como ele resolveu em Python a tarefa de coletar e analisar metadados de arquivos do Excel .


Esta nota revela em mais detalhes a bem conhecida tese: Para uma tarefa específica, você precisa escolher a ferramenta mais adequada aplicável à automação de escritório.


VBA e Python


VBA (Visual Basic for Applications) , de fato, a linguagem mais popular para automatizar o Microsoft Office. Disponível na caixa, além do Excel, ele funciona no PowerPoint, Outlook, Access, Projeto e outros aplicativos.


Se você fizer a pergunta: “Qual linguagem de programação escolher primeiro”, em algum lugar de 90% de todos os casos o Python será oferecido. Na prática, pode haver qualquer outro idioma, mas, com base na popularidade do idioma e na minha experiência, compararei com ele.


Em geral, você pode descrever a situação através de um cronograma semelhante:



Não haverá uma comparação detalhada, considere os principais recursos matadores em uma situação em que um programador júnior / funcionário de escritório deseja automatizar algo relacionado ao MS Office e ele tem a oportunidade de escolher entre idiomas.


Se, por várias razões, não houver escolha, não há nada para comparar.


A favor do VBA



  • Excelente trabalho com o modelo de objeto do Excel e outros aplicativos do MS Office . Escrever código VBA para a maioria das operações internas é trivial. No Python, comparado ao VBA, o suporte ao modelo de objeto do Office é muito fraco.
  • Suporte para vários formatos do MS Office. O maior problema para idiomas externos é trabalhar com diferentes formatos de arquivo do MS Office. Por exemplo, arquivos xls, xlsx, xlsm podem exigir bibliotecas diferentes, pois cada um funciona bem apenas com seu próprio formato de arquivo. Para o VBA, tudo isso é um "arquivo do Excel" que funciona igualmente bem em geral.
  • Trabalhe com o MS Exchange. Se for necessário fornecer trabalho com correio / calendário corporativo no Exchange, nem todos os idiomas possuem uma biblioteca normal para trabalhar com o protocolo do Exchange. No VBA, isso é resolvido de maneira relativamente simples com o uso do modelo de objeto do MS Outlook em uma macro.
  • Fácil instalação e distribuição. Não há necessidade de instalar nada em um escritório já instalado. Para que um colega use o programa, basta transferir um arquivo para ele com uma macro. É fácil adicionar um suplemento que permita "instalar" um modelo de macro em segundo plano no escritório.
  • Interatividade nos aplicativos do MS Office. Nos programas do Office, você pode simplesmente colocar botões de inicialização de macro e (um pouco mais complicado) criar uma interface do usuário inteira. Isso também inclui escrever suas fórmulas no Excel e o fato de que as macros podem afetar objetos em documentos do Office em tempo real.
  • Gravação de macro. Uma ferramenta conveniente que permite gravar as ações de uma pessoa no código finalizado, para uso posterior na edição.

A favor do Python (e outras linguagens de programação externas)



  • Sintaxe agradável e açúcar sintático. Em resumo, o VBA não é expressivo e conveniente. É uma questão de gosto pessoal, mas o Python é muito mais conveniente para mim.
  • Um rico ecossistema de bibliotecas. Uma enorme seleção de bibliotecas prontas para trabalhar com o mundo exterior. Tentar criar um programa no VBA que interaja com alguma API externa ainda é um problema. É interessante que apenas por trabalhar com arquivos do Office da biblioteca do mesmo Python - francamente "no C".
  • Boas ferramentas de desenvolvimento. Você pode escolher entre uma grande variedade de programas que facilitam o processo de desenvolvimento. O editor VBA padrão do Office oferece funcionalidades muito ruins e, em comparação com as alternativas do mundo Python, é francamente inconveniente. Escrever código VBA em um editor externo e copiá-lo dentro do escritório para depuração também é inconveniente.
  • Velocidade do trabalho. Não verifiquei a velocidade do trabalho de thread único, mas presumo que, no caso de trabalho de thread único, o Python tenha uma vantagem. De qualquer forma, o processamento multithread de dados / arquivos é bastante trivial, o que permite que você fale com maior velocidade possível.

Estojos



A seguir, são tarefas específicas que eu mesmo resolvi ou automatizei e quando precisei escolher uma pilha: VBA ou Python. Para cada tarefa, a pilha selecionada é indicada e explicações são fornecidas por que:


  • Tarefa: Um programa para verificar todos os arquivos do Excel em um diretório em busca de folhas ocultas
    • Minha escolha: VBA . Razões: simplicidade do trabalho com diferentes formatos de arquivo do Excel e falta de interações externas.
  • Objetivo: um serviço que deveria permitir ao usuário converter arquivos do PowerPoint em PDF de um dispositivo móvel para visualização
    • O serviço foi implementado como um bot de email, para o endereço do qual o usuário pode enviar arquivos do Office, e uma resposta com arquivos PDF é enviada ao usuário por email.
    • Minha escolha: lógica VBA + Python para monitoramento
      • Em primeiro lugar, é garantido que as funções internas preservam um PDF autêntico em um arquivo do PowerPoint (as bibliotecas externas se saem mal com a renderização do PowerPoint).
      • Em segundo lugar, a implementação do bot de correio como uma macro no MS Outlook resolveu os problemas de trabalhar com o correio corporativo do Exchange. Portanto, no Python não há biblioteca normal para trabalhar com o MS Exchange.
      • O Python foi usado para organizar o monitoramento do serviço e a notificação de possíveis problemas.
  • Tarefa: Um programa para combinar arquivos do Powerpoint com "interlinear" (texto do falante) em um arquivo de impressão
    • Minha escolha: VBA . O problema foi resolvido convertendo dois arquivos em PDF e combinando-os com o Riffle Shuffle. Como a qualidade da conversão para PDF é importante, as funções internas do escritório foram usadas para exportar para PDF.
  • Tarefa: Dado um banco de dados de empresas do setor na forma de cartões, separe os arquivos html que precisam ser filtrados e combinados em um arquivo do Excel para calcular vários indicadores.
    • Minha escolha: Python .
      • Para extrair dados de cartões html, uma biblioteca para analisar o html BeautifulSoup foi útil.
      • O programa cria o arquivo do Excel, para que nós mesmos possamos decidir quais análises calcular nele e quais outras na etapa de preparação de dados no Python.
  • Tarefa: Traduzir todo o texto em uma apresentação do PowerPoint para outro idioma por um tradutor de máquina
    • Minha escolha: VBA . Era importante trabalhar com cuidado com o texto nos objetos internos do arquivo do PowerPoint. A API Yandex foi usada para tradução, pois é gratuita para pequenos volumes e fácil de conectar. Por exemplo, não consegui que a API do tradutor do Bing funcionasse no VBA, porque lá preciso do OAuth com meus problemas para funcionar. Se eu tivesse que trabalhar com o Bing, provavelmente faria um serviço intermediário em Python.
  • Tarefa: Para determinados cotadores de ações, pegue os dados da API com indicadores financeiros (a API emite um arquivo CSV gerado na solicitação) e leia vários benchmarks para análise com base em
    • Minha escolha: Python . Embora a API seja simples (não requer assinatura de solicitações ou autorização) e envie dados para CSV, o Python é selecionado, pois não há motivo para escolher o VBA e é mais conveniente escrever em Python.
  • Tarefa: Manter uma base de instruções, enviar notificações aos artistas, gerar um relatório para impressão
    • Aqui eu escolhi por muito tempo, pois existem muitas alternativas:
      • Sistema de pedidos prontos de terceiros
      • Banco de dados com algum tipo de manipulador
      • Acesso
      • Excel
    • Minha escolha: VBA
      • Em primeiro lugar, o próprio Excel é uma interface de usuário pronta para o trabalho.
      • Em segundo lugar, o VBA resolve o problema de trabalhar com o Exchange corporativo por meio da conexão do MS Outlook.
      • Em terceiro lugar, essa decisão foi tomada de olho nos colegas, a quem o Excel era mais claro do que qualquer coisa completamente nova.

Conclusão


Espero que alguém a nota seja útil e economize tempo na escolha de uma pilha para resolver seus problemas.

Source: https://habr.com/ru/post/pt439898/


All Articles