VBA y Python para automatización de Excel y MS Office

El motivo de la nota fue un artículo sobre Habré, en el que el autor describió cómo resolvió en Python la tarea de recopilar y analizar metadatos de archivos de Excel .


Esta nota revela con más detalle la tesis bien conocida: para una tarea específica, debe elegir la herramienta más adecuada aplicable a la automatización de la oficina.


VBA y Python


VBA (Visual Basic para Aplicaciones) , de facto, el lenguaje más popular para automatizar Microsoft Office. Disponible desde el cuadro, además de Excel, funciona en PowerPoint, Outlook, Access, Project y otras aplicaciones.


Si hace la pregunta: "Qué lenguaje de programación elegir primero", se ofrecerá Python en algún lugar del 90% de los casos. En la práctica, puede haber cualquier otro idioma, pero, según la popularidad del idioma y mi experiencia, lo compararé.


En general, puede describir la situación a través de un horario similar:



No habrá una comparación detallada, tenga en cuenta las principales características asesinas en una situación en la que un programador junior / empleado de oficina quiere automatizar algo relacionado con MS Office, y tiene la oportunidad de elegir entre idiomas.


Si por varias razones no hay otra opción, entonces no hay nada que comparar.


A favor de VBA



  • Excelente trabajo con el modelo de objetos de Excel y otras aplicaciones de MS Office . Escribir código VBA para la mayoría de las operaciones internas es trivial. En Python, en comparación con VBA, la compatibilidad con el modelo de objetos de Office es muy débil.
  • Soporte para varios formatos de MS Office. El mayor problema para los idiomas externos es trabajar con diferentes formatos de archivo de MS Office. Por ejemplo, los archivos xls, xlsx, xlsm pueden requerir bibliotecas diferentes, ya que cada uno funciona bien solo con su propio formato de archivo. Para VBA, todo esto es un "archivo de Excel" que funciona igual de bien en general.
  • Trabaja con MS Exchange. Si es necesario proporcionar trabajo con el correo / calendario corporativo en Exchange, no todos los idiomas tienen una biblioteca normal para trabajar con el protocolo de Exchange. En VBA, esto se resuelve de manera relativamente simple mediante el uso del modelo de objetos de MS Outlook en una macro.
  • Fácil instalación y distribución. No es necesario instalar nada en una oficina ya instalada. Para que un colega use el programa, es suficiente transferirle un archivo con una macro. Es fácil agregar un complemento que le permite "instalar" un modelo de macro en el fondo de la oficina.
  • Interactividad dentro de las aplicaciones de MS Office. Dentro de los programas de Office, solo puede poner botones de inicio de macro y (un poco más complicado) hacer una IU completamente separada. Esto también incluye escribir sus fórmulas en Excel y el hecho de que las macros pueden afectar objetos dentro de documentos de Office en tiempo real.
  • Grabación de macros. Una herramienta conveniente que le permite grabar las acciones de una persona en el código terminado, para su posterior uso de edición.

A favor de Python (y otros lenguajes de programación externos)



  • Buena sintaxis y azúcar sintáctico. En resumen, VBA no es expresivo y conveniente. Esto es una cuestión de gusto personal, pero Python es mucho más conveniente para mí.
  • Un rico ecosistema de bibliotecas. Una gran selección de bibliotecas preparadas para trabajar con el mundo exterior. Intentar hacer un programa en VBA que interactúe con alguna API externa sigue siendo un problema. Es interesante que solo por trabajar con archivos de Office de la biblioteca de la misma Python, francamente "en la C".
  • Buenas herramientas de desarrollo. Puede elegir entre una gran selección de programas que facilitan el proceso de desarrollo. El editor estándar de VBA de Office ofrece una funcionalidad muy pobre y, en comparación con las alternativas del mundo de Python, es francamente inconveniente. Escribir código VBA en un editor externo y luego copiarlo dentro de la oficina para su depuración también es inconveniente.
  • Velocidad de trabajo. No verifiqué la velocidad del trabajo de un solo subproceso, pero supongo que en el caso del trabajo de un solo subproceso, Python tendrá una ventaja. En cualquier caso, el procesamiento multiproceso de datos / archivos está organizado de manera bastante trivial, lo que le permite hablar a una velocidad más alta posible.

Casos



Las siguientes son tareas específicas que yo mismo resolví o automaticé, y cuando necesitaba elegir una pila: VBA o Python. Para cada tarea, se indica la pila seleccionada y se explican por qué:


  • Tarea: un programa para verificar todos los archivos de Excel en un directorio en busca de hojas ocultas
    • Mi elección: VBA . Motivos: simplicidad de trabajo con diferentes formatos de archivo Excel y falta de interacciones externas.
  • Objetivo: un servicio que supuestamente permitiría a un usuario convertir archivos de PowerPoint a PDF desde un dispositivo móvil para verlos
    • El servicio se implementó como un bot de correo, a la dirección de la cual el usuario puede enviar archivos de Office, y una respuesta con archivos PDF se envía al usuario por correo.
    • Mi elección: lógica VBA + Python para monitoreo
      • En primer lugar, las funciones internas están garantizadas para preservar un PDF que sea auténtico en un archivo de PowerPoint (las bibliotecas externas funcionan mal con la representación de PowerPoint).
      • En segundo lugar, la implementación del bot de correo como una macro en MS Outlook resolvió los problemas de trabajar con el correo de Exchange corporativo. Entonces, en Python no hay una biblioteca normal para trabajar con MS Exchange.
      • Python se usó para organizar el monitoreo del servicio y la notificación de posibles problemas.
  • Tarea: Un programa para combinar archivos de Powerpoint con "interlineal" (texto de altavoz) en un archivo de impresión
    • Mi elección: VBA . El problema se resolvió convirtiendo dos archivos a PDF y combinándolos con Riffle Shuffle. Dado que la calidad de la conversión a PDF es importante, las funciones integradas de Office se utilizaron para exportar a PDF.
  • Tarea: Dada una base de datos de empresas de la industria en forma de tarjetas, archivos html separados que deben filtrarse y combinarse en 1 archivo Excel para calcular una serie de indicadores.
    • Mi elección: Python .
      • Para extraer datos de tarjetas html, fue útil una biblioteca para analizar html BeautifulSoup.
      • El programa crea el archivo de Excel, por lo que nosotros mismos podemos decidir qué análisis calcular en él y qué más en la etapa de preparación de datos en Python.
  • Tarea: traducir todo el texto de una presentación de PowerPoint a otro idioma por un traductor automático
    • Mi elección: VBA . Era importante trabajar cuidadosamente con el texto en los objetos internos del archivo de PowerPoint. La API de Yandex se utilizó para la traducción, ya que es gratuita para volúmenes pequeños y fácil de conectar. Por ejemplo, no pude hacer que la API del traductor de Bing funcione en VBA, porque allí necesito OAuth con mis problemas para trabajar. Si tuviera que trabajar con Bing, entonces, probablemente, haría un intermediario de servicios en Python.
  • Tarea: Para los tickers de acciones dados, tome datos de la API con indicadores financieros (la API emite un archivo CSV generado a solicitud) y lea una serie de puntos de referencia para su análisis en base a
    • Mi elección: Python . Aunque la API es simple (no requiere ninguna firma de solicitudes o autorización) y envía datos a CSV, Python está seleccionado, ya que no hay razón para elegir VBA, y es más conveniente escribir en Python.
  • Tarea: Mantener una base de instrucciones, enviar notificaciones a los artistas, generar un informe para imprimir
    • Aquí elegí por mucho tiempo, ya que hay muchas alternativas:
      • Sistema de pedido listo para usar de terceros
      • Base de datos con algún tipo de manejador
      • Acceso
      • Excel
    • Mi elección: VBA
      • En primer lugar, Excel es una interfaz de usuario lista para usar para el trabajo.
      • En segundo lugar, VBA resuelve el problema de trabajar con Exchange corporativo a través de la conexión MS Outlook.
      • En tercer lugar, esta decisión se tomó con la vista puesta en colegas, a quienes Excel era más claros que cualquier cosa completamente nueva.

Conclusión


Espero que para alguien la nota sea útil y ahorre tiempo al elegir una pila para resolver sus problemas.

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


All Articles