Вернуться на страницу brain2net: https://brain2net.ru/post/upravlenie-makrosom-vba-iz-python/
import pandas as pd
import openpyxl # one excel reader/writer compatible with pandas
from win32com.client import Dispatch
# Загружаем уже существующий Excel файл с маргосами test.xlsm
book = openpyxl.load_workbook('test.xlsm', keep_vba = True) # Load existing .xlsm file
Формируется ДатаФрейм для записи в Excel файл
df_write = pd.DataFrame({'First' : [5, 2, 0, 10, 4],
'Second' : [9, 8, 21, 3, 8]})
df_write
df_write записывается на Лист1 Excel файла
with pd.ExcelWriter('test.xlsm', engine='openpyxl') as writer: # open a writer instance with the filename of the
writer.book = book # Hand over input workbook
writer.sheets = dict((ws.title, ws) for ws in book.worksheets) # Hand over worksheets
writer.vba_archive = book.vba_archive # Hand over VBA information
df_write.to_excel(writer)
writer.save()
Из Python запускается макросом VBA, который воспроизводит загруженный на Лист1 pandas.DataFrame на Лист2 и добавляет в него столбец с суммой двух имеющихся.
try:
excel = Dispatch("Excel.Application")
#excel.Visible = True
workbook = excel.Workbooks.Open(r"C:\Users\Dmitry\test.xlsm")
workbook.Application.Run("Module1.test")
workbook.Save()
excel.Quit()
except IOError:
print("Error")
Полученный в результате на Лист2 pandas.DataFrame загружается в Python.
df2 = pd.read_excel('test.xlsm', sheet_name='Sheet2')
df2
Вернуться на страницу brain2net: https://brain2net.ru/post/upravlenie-makrosom-vba-iz-python/