Exécutez Python à partir d'Excel VBA avec xlwings et un supplément de tutoriel

Consultez l'article selon lequel Qiita peut exécuter Python avec Excel VBA à l'aide d'une bibliothèque appelée xmlwings et rédigez un petit supplément Quick Start +. J'écris habituellement sur mon blog, donc je pense que c'est une bonne idée d'écrire un supplément sur Qiita.

Il semble que xlwings a considérablement changé depuis la v0.9, et comme il ne fonctionne pas avec le code actuel, j'ai ajouté à propos de la v0.9 ou plus

Environnement de développement

Installation

Il n'y a rien de spécial, il suffit d'installer avec pip

pip install xlwings

Dans mon environnement, il est installé à l'emplacement suivant. Emplacement auquel se référer lors de l'importation ultérieure de fichiers depuis Excel C:\Python27\Lib\site-packages\xlwings

Exécuter un échantillon

Exemple de code

Module Python appelé depuis Excel

mymodule.py


import numpy as np
from xlwings import Workbook, Range

def rand_numbers():
    """ produces standard normally distributed random numbers with shape (n,n)"""
    wb = Workbook.caller()  # Creates a reference to the calling Excel file
    n = int(Range('Sheet1', 'B1').value)  # Write desired dimensions into Cell B1
    rand_num = np.random.randn(n, n)
    Range('Sheet1', 'C3').value = rand_num

Référence: https://docs.xlwings.org/en/stable/migrate_to_0.9.html

mymodule.py


import numpy as np
import xlwings as xw

def rand_numbers():
    """ produces standard normally distributed random numbers with shape (n,n)"""
    wb = xw.Book.caller()  # Creates a reference to the calling Excel file
    n = int(wb.sheets['Sheet1'].range('B1').value)  # Write desired dimensions into Cell B1
    rand_num = np.random.randn(n, n)
    wb.sheets['Sheet1'].range('C3').value = rand_num

Code VBA écrit côté Excel

Avant la v0.9, il pouvait être utilisé même s'il ne s'agissait pas d'une chaîne de caractères RAW, mais dans la version actuelle après la v0.9, si vous utilisez \, utilisez une chaîne de caractères RAW ou définissez le délimiteur de chemin sur / Si vous ne le définissez pas sur, une erreur se produira.

ExcelVBA


Sub RandomNumbers()
    RunPython ("sys.path.append('C:\Temp'); import mymodule; mymodule.rand_numbers()")
End Sub

ExcelVBA


Sub RundomNumbers()
    RunPython ("sys.path.append(r'C:\Temp'); import mymodule; mymodule.rand_numbers()")
'    RunPython ("sys.path.append('C:/Temp'); import mymodule; mymodule.rand_numbers()")
End Sub

Dans cet exemple de code VBA Il dit RunPython (" import mymodule; mymodule.rand_numbers () "), mais je me demande si c'est un petit piège dans le tutoriel. Il indique où placer le fichier mymodule.py, mais peu importe où vous le mettez si vous ajoutez un chemin arbitraire avant ʻimport de RunPython. Cette fois, j'ai mis mymodule.py dans C: \ Tempqui n'est pas dans le chemin. Excel lui-même devrait être enregistré dansC: \ Users \ h_oki \ Documents \ book en tant que test.xlsm`, et je voulais conserver les modules dans un emplacement différent, mais assurez-vous qu'ils peuvent être lus de n'importe où pour les tests. Je voulais le faire comme ci-dessus.

Supplément

Peu importe qu'il s'agisse de VBA ou d'Excel, il s'agit simplement d'exécuter le code Python, vous pouvez donc le charger dans n'importe quel module que vous avez en définissant le chemin après cela. ʻImport sysest lu par lui-même dans xlwings, vous n'avez donc pas besoin de le saisir. Dans l'exemple de code, il ne peut être lu que s'il est placé dans le chemin ou directement sous celui-ci, mais si vous voulez le placer dans un chemin, mettezsys.path.append ('/ votre / vers / chemin')avantimport mon moduleTout ce que vous avez à faire est de l'écrire. De plus, même si vous n'ajoutez passys.path.append ('/ votre / vers / chemin'), il ne semble y avoir aucun problème si l'emplacement est défini dans la variable d'environnement PYTHONPATH`.

Résultat d'exécution

Je n'ai pas pu télécharger l'image pour une raison quelconque, veuillez donc l'omettre. Cependant, j'ai pu exécuter mymodule.py (le code de démarrage rapide lui-même) placé n'importe où.

Article de référence

Article associé

Utilisez xlwings J'ai exécuté un script Python à partir d'Excel et joué avec xlwings, qui peut représenter graphiquement les résultats dans Excel.

officiel

officiel de xlwings Quickstart

Recommended Posts

Exécutez Python à partir d'Excel VBA avec xlwings et un supplément de tutoriel
Introduction à Python pour les utilisateurs de VBA - Appeler Python depuis Excel avec xlwings -
Exécutez Python avec VBA
Exécutez Python à partir d'Excel
Exécutez des scripts Python à partir d'Excel (en utilisant xlwings)
Exécutez Aprili depuis Python sur Orange
[Note] Exécuter du code Python à partir d'Excel (xlwings)
Excel avec Python
Lire le nom / la plage de cellules Excel avec Python VBA
Exécutez prepDE.py avec python3
Gérez Excel avec python
Exécutez Blender avec python
Tutoriel Cloud Run (python)
Utiliser Excel avec Python (1)
Exécutez iperf avec python
Utiliser Excel avec Python (2)
Manipuler des fichiers Excel à partir de python avec xlrd (mémo personnel)
Commençons Python à partir d'Excel. Je n'utilise pas VBA.
python + sélénium + safari-run iphone safari de mac avec webdriver
Exploitez Excel avec Python open pyxl
Exécutez python avec PyCharm (Windows)
Exécutez Python avec CloudFlash (arm926ej-s)
Exécutez le script illustrator à partir de python
Exécuter Label avec tkinter [Python]
Avec skype, notifiez avec skype de python!
solveur> Lien> Résoudre le solveur Excel avec python
Appeler C depuis Python avec DragonFFI
Utilisation de Rstan de Python avec PypeR
Installez Python à partir des sources avec Ansible
Exécutez Rotrics DexArm avec l'API Python
Exécutez mruby avec Python ou Blender
Jouons avec Excel avec Python [Débutant]
Exécutez XGBoost avec Cloud Dataflow (Python)
Exécutez python3 Django1.9 avec mod_wsgi (déployer)
Gérer les fichiers Excel CSV avec Python
Détection d'erreur Python exécutée à partir de Powershell
Exécutez des scripts Python de manière synchrone à partir de C #
Appelez python de nim avec Nimpy
Création de graphique Excel à l'aide de python xlwings
Jusqu'à ce que Python fonctionne sur Apache
Exécutez Ansible à partir de Python à l'aide de l'API
Charger fbx depuis python avec cinema4d
Exécutez le script Python à partir de Cisco Memorandum_EEM
Collecter des informations sur Twitter avec Python (API Twitter)
Exécutez Cloud Dataflow (Python) depuis AppEngine
Recevoir des données textuelles de mysql avec python
Obtenir le code HTML de l'élément avec du sélénium Python
[Note] Obtenir des données de PostgreSQL avec Python
Exécutez le servo avec Python sur ESP32 (Windows)
Lire un fichier audio à partir de Python avec interruption
Créez wordcloud à partir de votre tweet avec python3
[Didacticiel d'analyse Python en base de données avec SQL Server 2017]
Uncle SES modernise l'application VBA avec Python
Dessinez Nozomi Sasaki dans Excel avec python
Créez rapidement un fichier Excel avec Python #python
Exécutez Keras avec le backend CNTK à partir de CentOS