Технологии Blogger.

Интеграция Python в Excel при помощи Xlwings

Сегодня мы разберем как можно запускать скрипты Python напрямую из Excel, минуя какие либо промежуточные интерфейсы. Для этой задачи нам понадобится пакет Хlwings. Он входит в состав Anaconda, поэтому если Вы ее установили, то никаких дополнительных действий не требуется.

Интеграция Python в Excel при помощи Xlwings
Обращаю внимание, что инструкция относится для версии xlwings 0.16.0 и выше. Если у вас установлена версия ниже - обновите пожалуйста пакет.

1. Установка Excel аддона 

Первое, что надо сделать - это установить специальный аддон в Excel. Для этого запустите командную строку Anaconda и введите команду:

xlwings addin install

После того, как команда отработала, то запустите Excel и вы должны увидеть новую ленту xlwings:

Интеграция Python в Excel при помощи Xlwings

Далее запустите VBA редактор (Alt + F11), там в меню Tools выберите References..., в открывшемся меню активируйте xlwings:

Интеграция Python в Excel при помощи Xlwings

2. Настройка ленты xlwings в Excel

Далее необходимо прописать в ленте xlwings путь до Python, а также расположение директории, куда была установлена Anaconda и как называется используемое Виртуальное окружение (environment).

Итак в поле Interpreter указываем путь до файла python.exe, включая название файла. К примеру у меня адрес следующий: D:\Python\Anaconda3\envs\work\python.exe

В поле Conda Base указываем адрес, куда установлена Anaconda. К примеру у меня это D:\Python\Anaconda3.

Далее в поле Conda Env указываем название виртуального окружения. У меня к примеру это work. Если Вы не знаете название вашего виртуального окружения, то запустите Anaconda Navigator, далее перейдите в пункт Environments и там увидите необходимое название.

3. Запуск Python скрипта из Excel

Для запуска скриптов есть два варианта:

3.1 Без использования VBA

Создайте Excel файл, сохраните его с любым названием, далее в этой же папке создайте python скрипт с таким же названием, как и Excel файл, в нем создайте функцию с названием main(). Эту функцию вы сможете вызвать из ленты xlwings нажав на кнопку "Run main". К примеру внесите в скрипт следующий код:
import xlwings as xw

def main():
    wb = xw.Book.caller()
    wb.sheets[0].range('A1').value = 'Hello World!'
Сохраните скрипт и запустите его, нажав на кнопку "Run main" в ленте xlwings. Если вы все сделали корректно, то в ячейке A1 Excel файла должен появиться текст "Hello World!".

3.2 С использованием VBA

Создайте Excel файл, сохраните его с любым названием в формате с поддержкой макросов, далее в этой же папке создайте python скрипт с таким же названием, как и Excel файл. В скрипте создайте функцию с любым названием, к примеру:
import xlwings as xw

def hello():
    wb = xw.Book.caller()
    wb.sheets[0].range('A1').value = 'Привет мир!!!'
Далее запустите редактор VBA и в нем пропишите следующий код:

Sub HelloWorld()
    RunPython ("import Excel_Xlwings; Excel_Xlwings.hello()")
End Sub
Первая часть параметров функции (import Excel_Xlwings) указывает на название скрипта Python (Excel_Xlwings), а вторая Excel_Xlwings.hello() - на название функции в этом скрипте. Теперь выполните этот макрос, как и любой другой макрос VBA. Если сделали все правильно - то в результате в ячейке A1 Excel файла должен появиться текст "Привет мир!!!".

4. Создание пользовательских функций (UDF) в Excel при помощи Python

Как и в пункте 3.2 необходимо создать и сохранить Excel файл с поддержкой макросов, далее в той же папке, где расположен сохраненный эксель файл, создать скрипт Python и внести туда код пользовательской функции, к примеру:
import xlwings as xw
   
@xw.func
def double_sum(x, y):
    """Возвращает сумму двух агрументов умноженную на 2"""
    return 2 * (x + y)
Сохраняем скрипт, далее в ленте xlwings нажимаем кнопку Import Functions для загрузки созданной функции из Python в Excel. Теперь вы можете применять эту функцию, как и другие функции Excel:

Интеграция Python в Excel при помощи Xlwings

Отлично. На сегодня все. Есть вопросы - задавайте в комментариях ниже.
Опубликовать в Google Plus