Lesen Sie den Artikel, in dem Qiita Python mit Excel VBA unter Verwendung einer Bibliothek namens xmlwings ausführen kann, und schreiben Sie eine kleine Ergänzung zu Schnellstart +. Normalerweise schreibe ich in meinem Blog, daher halte ich es für eine gute Idee, eine Beilage zu Qiita zu schreiben.
Es scheint, dass sich xlwings seit Version 0.9 erheblich geändert hat, und da es mit dem aktuellen Code nicht funktioniert, habe ich ungefähr Version 0.9 oder höher hinzugefügt
Es gibt nichts Besonderes, nur mit pip installieren
pip install xlwings
In meiner Umgebung wird es am folgenden Speicherort installiert. Speicherort, auf den beim späteren Importieren von Dateien von der Excel-Seite verwiesen werden soll C:\Python27\Lib\site-packages\xlwings
Python-Modul aus Excel aufgerufen
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
Referenz: 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
VBA-Code auf der Excel-Seite geschrieben
Vor Version 0.9 konnte es auch dann verwendet werden, wenn es sich nicht um eine RAW-Zeichenfolge handelte. In der aktuellen Version nach Version 0.9 verwenden Sie jedoch, wenn Sie "" verwenden, eine RAW-Zeichenfolge oder setzen Sie den Pfadbegrenzer auf "/" Wenn Sie es nicht einstellen, tritt ein Fehler auf.
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
In diesem VBA-Codebeispiel
Es heißt "RunPython (" import mymodule; mymodule.rand_numbers () ")", aber ich frage mich, ob dies eine kleine Falle im Tutorial ist.
Es wird angegeben, wo die Datei mymodule.py abgelegt werden soll, aber es spielt keine Rolle, wo Sie sie ablegen, wenn Sie vor dem Importieren von RunPython einen beliebigen Pfad hinzufügen.
Dieses Mal habe ich "mymodule.py" in "C: \ Temp" eingefügt, was nicht im Pfad enthalten ist.
Excel selbst sollte in C: \ Users \ h_oki \ Documents \ book
als test.xlsm
gespeichert werden, und ich wollte die Module an einem anderen Ort aufbewahren, aber sicherstellen, dass sie zum Testen von überall gelesen werden können. Ich wollte es wie oben machen.
Es spielt keine Rolle, ob es sich um VBA oder Excel handelt, es wird lediglich der Python-Code ausgeführt, sodass Sie ihn in jedes Modul laden können, indem Sie den Pfad danach festlegen.
import sys
wird in xlwings von selbst gelesen, sodass Sie es nicht eingeben müssen.
Im Beispielcode kann es nur gelesen werden, wenn es im Pfad oder direkt darunter platziert ist. Wenn Sie es jedoch in einem beliebigen Pfad platzieren möchten, geben Sie "sys.path.append (" / your / to / path ") vor" import my module "ein Alles was Sie tun müssen, ist es einzuschreiben.
Auch wenn Sie nicht "sys.path.append (" / your / to / path ") hinzufügen, scheint es kein Problem zu geben, wenn der Speicherort in der Umgebungsvariablen" PYTHONPATH "festgelegt ist.
Ich konnte das Bild aus irgendeinem Grund nicht hochladen. Bitte lassen Sie es weg. Ich konnte jedoch "mymodule.py" (den Schnellstartcode selbst) an einer beliebigen Stelle ausführen.
Verwenden Sie xlwings Ich habe ein Python-Skript aus Excel ausgeführt und mit xlwings gespielt, mit denen die Ergebnisse in Excel grafisch dargestellt werden können.
Recommended Posts