Закрасить ячейку excel python

Обновлено: 07.07.2024

В сегодняшней статье я хотел бы, как можно подробнее, рассмотреть интеграцию приложений Python и MS Excel. Данные вопрос может возникнуть, например, при создании какой-либо системы онлайн отчетности, которая должна выгружать результаты в общепринятый формат ну или какие-либо другие задачи. Также в статье я покажу и обратную интеграцию, т.е. как использовать функцию написанную на python в Excel, что также может быть полезно для автоматизации отчетов.

Работаем с файлами MS Excel на Python

Для работы с Excel файлами из Python мне известны 2 варианта:

Использование библиотек

Итак, первый метод довольно простой и хорошо описан. Например, есть отличная статья для описания работы c xlrd, xlwt, xlutils. Поэтому в данном материале я приведу небольшой кусок кода с их использованием.

Для начала загрузим нужные библиотеки и откроем файл xls на чтение и выберем
нужный лист с данными:


Теперь давайте посмотрим, как считать значения из нужных ячеек:


Как видно чтение данных не составляет труда. Теперь запишем их в другой файл. Для этого создам новый excel файл с новой рабочей книгой:


Запишем в новый файл полученные ранее данные и сохраним изменения:


Из примера выше видно, что библиотека xlrd отвечает за чтение данных, а xlwt — за запись, поэтому нет возможности внести изменения в уже созданную книгу без ее копирования в новую. Кроме этого указанные библиотеки работают только с файлами формата xls (Excel 2003) и у них нет поддержки нового формата xlsx (Excel 2007 и выше).

Чтобы успешно работать с форматом xlsx, понадобится библиотека openpyxl. Для демонстрации ее работы проделаем действия, которые были показаны для предыдущих библиотек.

Для начала загрузим библиотеку и выберем нужную книгу и рабочий лист:


Как видно из вышеприведенного листинга сделать это не сложно. Теперь посмотрим как можно считать данные:


Отличие от прошлых библиотек в том, что openpyxl дает возможность отображаться к ячейкам и последовательностям через их имена, что довольно удобно и понятно при чтении программы.

Теперь посмотрим как нам произвести запись и сохранить данные:


Из примера видно, что запись, тоже производится довольно легко. Кроме того, в коде выше, можно заметить, что openpyxl кроме имен ячеек может работать и с их индексами.

К недостаткам данной библиотеки можно отнести, то что, как и в предыдущем примере, нет возможности сохранить изменения без создания новой книги.

Как было показано выше, для более менее полноценной работы с excel файлами, в данном случае, нужно 4 библиотеки, и это не всегда удобно. Кроме этого, возможно нужен будет доступ к VBA (допустим для какой-либо последующей обработки) и с помощью этих библиотек его не получить.

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

Работа с com-объектом

В своих отчетах я предпочитаю использовать второй способ, а именно использование файла Excel через com-объект с использованием библиотеки win32com. Его преимуществом, является то, что вы можете выполнять с файлом все операции, которые позволяет делать обычный Excel с использованием VBA.

Проиллюстрируем это на той же задаче, что и предыдущие примеры.

Для начала загрузим нужную библиотеку и создадим COM объект.


Теперь мы можем работать с помощью объекта Excel мы можем получить доступ ко всем возможностям VBA. Давайте, для начала, откроем любую книгу и выберем активный лист. Это можно сделать так:


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


Как можно заметить, мы оперируем здесь функциями чистого VBA. Это очень удобно если у вас есть написанные макросы и вы хотите использовать их при работе с Python при минимальных затратах на переделку кода.

Посмотрим, как можно произвести запись полученных значений:


Из примера видно, что данные операции тоже довольно просто реализовываются. Кроме этого, можно заметить, что изменения мы сохранили в той же книге, которую открыли для чтения, что достаточно удобно.

Однако, внимательный читатель, обратит внимание на переменную i, которая инициализируется не 0, как принято python, а 1. Это связано с тем, что мы работаем с индексами ячеек как из VBA, а там нумерация начинается не с 0, а с 1.

На этом закончим разбор способов работы с excel файлами в python и перейдем к обратной задаче.

Вызываем функции Python из MS Excel

Может возникнуть такая ситуация, что у вас уже есть какой-либо функция, которая обрабатывает данные на python, и нужно перенести ее функциональность в Excel. Конечно же можно переписать ее на VBA, но зачем?

Для использования функций python в Excel есть прекрасная надстройка ExcelPython. С ее помощью вы сможете вызывать функции написанные на python прямо из Excel, правда придется еще написать небольшую обертку на VBA, и все это будет показано ниже.

Итак, предположим у нас есть функция, написанная на python, которой мы хотим воспользоваться:


На вход ей подается список, состоящий из списков, это одно из условий, которое должно выполняться для работы данной функции в Excel.

Сохраним функцию в файле plugin.py и положим его в ту же директорию, где будет лежать наш excel файл, с которым мы будем работать.

Теперь установим ExcelPython. Установка происходит через запуск exe-файла и не вызывает затруднений.

Когда все приготовления выполнены, открываем тестовый файл excel и вызовем редактор VBA (Alt+F11). Для работы с вышеуказанной надстройкой необходимо ее подключить, через Tools->References, как показано на рисунке:


Ну что же, теперь можно приступить к написанию функции-обертки для нашего Python-модуля plugin.py. Выглядеть она будет следующим образом:


Итак, что же происходит в данной функции?

Для начала, с помощью PyModule , мы подключаем нужный модуль. Для этого в качестве параметров ей передается имя модуля без расширения, и путь до папки в которой он находится. На выходе работы PyModule мы получаем объект для работы с модулем.

Затем, с помощью PyCall , вызываем нужную нам функцию из указанного модуля. В качестве параметров PyCall получает следующее:

  1. Объект модуля, полученный на предыдущем шаге
  2. Имя вызываемой функции
  3. Параметры, передаваемые функции (передаются в виде списка)

Теперь, чтобы убедиться в работоспособности нашей связки, вызовем нашу свежеиспеченую функцию на листе в Excel:


Как видно из рисунка все отработало правильно.

Надо отметить, что в данном материале используется старая версия ExcelPython, и на GitHub'e автора доступна новая версия.

Заключение

В качестве заключения, надо отметить, примеры в данной статье самые простые и для более глубоко изучения данных методов, я рекомендую обратиться к
документации по нужным пакетам.

Также хочу заметить, что указанные пакеты не являются единственными и в статье опущено рассмотрение, таких пакетов как xlsxwriter для генерации excel файлов или xlwings, который может работать с Excel файлами «на лету», а также же PyXLL, который выполняет аналогичные функции ExcelPython.

Кроме этого в статье я попытался несколько обобщить разборасанный по сети материал, т.к. такие вопросы часто фигурируют на форумах и думаю некоторым будет полезно иметь, такую «шпаргалку» под рукой.

Модули xlrd и xlwt обязательных для изучения модулей Python (обработка файлов Excel)

Каталог статей

1. Введение

В работе Python excel в основном используются две библиотеки: xlrd и xlwt, то есть xlrd предназначен для чтения Excel, а xlwt - для записи библиотеки Excel.

Модуль xlrd: может читать таблицы .xls, .xlsx

Модуль xlwt: может записывать в таблицу .xls (Невозможно записать файлы .xlsx! ! !)

2. Способ установки

Модуль xlrd и модуль xlwt не являются встроенными модулями и должны быть установлены вручную.

Три, описание формы Excel

Эти два модуля очень интуитивно понятны для определения структуры таблицы Excel, и обычные привычки использования таблицы Excel в основном одинаковы.

Есть три уровня:Книга-Лист-Ячейка。

  • Книга - это файл с расширением .xls / .xlsx.
  • В книге есть несколько листов, к которым можно получить доступ по индексу или имени.
  • Рабочий лист содержит несколько строк и несколько столбцов.Основной единицей на пересечении строк и столбцов является ячейка, а содержимое записывается в ячейку. Доступ к ячейкам можно получить по индексу строки и столбца.

В питонеКнига-Лист-Ячейка, Как объект

  • WorkBook: объект Workbook
  • Лист: объект формы
  • Ячейка: объект таблицы


Четыре, xlrd читает файлы Excel

4.1 Получение объекта WorkBook

параметр: Имя файла - это путь к открываемому файлу электронной таблицы.

возвращаемое значение: Объект xlrd.book.Book

4.1 объект таблицы операций xlrd

В одном Excel может быть несколько листов, тогда вы можете получить нужную информацию о листе следующими способами.

метод Функции
workbook.sheet_names() Получите названия всех листов и сохраните их в виде списка
workbook.sheet_by_index(1) Получить объект листа по индексу
workbook.sheets() Получить все объекты листа
sheet.nrows Получить все строки указанного листа
sheet.ncols Получить количество всех столбцов на указанном листе
workbook.sheet_by_name(‘sheet’) Получить объект листа в соответствии с именем листа

Файл операции (score table.xlsx):


Пример кода:

4.2 объект ячейки операции xlrd

метод Функции
sheet.cell(row,col) Получить объект ячейки указанной строки и столбца
sheet.row_slice(row,start_col,end_col) Получить объект ячейки определенного столбца указанной строки.
sheet.col_slice(col,start_row,end_row) Получить объект ячейки из нескольких строк указанного столбца.
sheet.cell_value(row,col) Получить значение указанной строки и столбца.
sheet.row_values(row,start_col,end_col) Получение значений определенных столбцов указанной строки является расширенным использованием sheet.row_slice.
sheet.col_values(col,start_row,end_row) Получение значения нескольких строк указанного столбца - это расширенное использование sheet.col_slice.

Пример кода:

Тип данных ячейки

метод описание возвращаемое значение
xlrd.XL_CELL_TEXT(Text) Тип текста 1
xlrd.XL_CELL_NUMBER(Number) Числовой тип 2
xlrd.XL_CELL_DATE(Date) Тип даты и времени 3
xlrd.XL_CELL_BOOLEAN(Bool) Логический тип 4
xlrd.XL_CELL_EMPTY Пустой тип данных 0

Пример кода:

Пять, xlwt записывает в файл Excel

5.1 Простые рабочие шаги

Импортируйте модуль xlwt.

Создайте объект Workbook.

Создайте объект Sheet.

Запишите данные в указанную строку и столбец под Листом. Если вы хотите добавить новую ячейку к исходному объекту книги, вам нужно вызвать put_cell, чтобы добавить ее.

Сохранить как файл Excel

5.2 Справочник по общему API

Объект книги

  • кодировка: установите кодировку символов, по умолчанию - ascii, замените на utf-8, и выведите китайский язык в excel.
  • style_compression: указывает, нужно ли сжимать, обычно не используется.

Общие методы объектов Workbook

метод параметр возвращаемое значение Функции
add_sheet(sheetname,cell_overwrite_ok = False ) sheetname -Имя, используемое для этого рабочего листаcell_overwrite_ok Указывает, можно ли перезаписать ячейку, по умолчанию - False Добавить в объект рабочего листа Создайте рабочий лист в книге
save(filename_or_stream ) filename_or_stream - Это строка, содержащая имя файла, файл Excel будет сохранен (записан) на диск с указанным именем. нет Сохраните книгу как файл в локальном формате Excel

Атрибуты книги

Атрибуты Функции
Owner Установить владельца документа
country_code Код страны
wnd_protect Защита окон
backup_on_save Бэкап при сохранении
tabs_visible видна ли вкладка
dates_1904 Следует ли использовать систему дат 1904 года
use_cell_values Значение ячейки
default_style Стиль по умолчанию
colour_RGB цвет
vscroll_visible Видна ли вертикальная полоса прокрутки
hscroll_visible Видна ли горизонтальная полоса прокрутки
wnd_mini Свернуть окно
wnd_visible Видно ли окно
tab_width ширина табуляции
active_sheet Лист деятельности
Height высота
Width ширина
Hpos Абсцисса
Vpos Ось Y
Protect защита
obj_protect Защита объекта

Простой пример:

5.3 Пример кода

5.4 Установка стилей для Excel

1. Создайте таблицу и получите объект рабочего листа.

2. Установите ширину столбца, cols_num - количество столбцов.

3. Установите высоту строки.

4. Установите стиль ячейки Excel.

5. Записываем данные в ячейку.


6. Дополнение

При установке цвета шрифта или цвета фона ячейки вы можете использовать параметр 0x0D в исходном коде для представления разных цветов или вы можете использовать 0-127 для представления разных цветов.

xlsxwriter - это очень полная и эффективная библиотека для работы с Excel на Python. Он может помочь нам работать с Excel эффективно, быстро, большими партиями и автоматически. Он может помочь нам писать операции, записывать данные и рисовать изображения для выполнения наиболее распространенных операций Excel. Если вы хотите читать Excel, вам нужна другая библиотека xlrd . Для людей, которые ежедневно выполняют много работы по анализу и обработке данных Excel, эта библиотека может помочь нам сократить количество повторяющейся работы и реализовать автоматизацию. С помощью этой библиотеки python может заменить VBA в некоторых задачах, делая наши офисные инструменты более простыми и простыми. Из-за потребностей компании я начал узнавать и понимать.

Знакомство с методами и свойствами, используемыми для форматирования ячеек в Excel.

Атрибуты ячеек, которые можно форматировать, включают:Шрифты, цвета, узоры, границы, выравнивание и числовой формат。

1. Создать объект формата

Позвонив в рабочую книгу add_format() Метод создания объекта форматирования.

Установите свойства формата:Есть два способа: использовать интерфейс объекта или установить атрибут как словарь пар ключ / значение в конструкторе.

Значение по умолчанию формата ячейки

2. Методы и атрибуты формата ячеек


Установите выравнивание данных в ячейке:Есть два направления: горизонтальное и вертикальное.

горизонтальное направление
left
center
right
fill
justify
center_across
distributed
Вертикальное направление
top
vcenter
bottom
vjustify
vdistributed


Задайте текстовые данные в ячейке для переноса:



Установите поворот текста в ячейке:Угол поворота составляет от -90 до 90 градусов, при этом поддерживается 270 градусов.

Установите отступ текста в ячейке:


Установить сокращенный текст:Затем вы можете сжать текст по размеру ячейки.

Установите узор фона ячейки:Самый распространенный образец - 1, который представляет собой сплошную заливку цвета фона. format.set_pattern()

Установите цвет фонового рисунка ячейки:


Установите цвет узора переднего плана в ячейке: set_fg_color()

Установите стиль границы ячейки: set_border()

Вы можете использовать следующие методы для настройки каждого элемента кадра с одинаковыми параметрами:

Граница ячейки состоит из нижней, верхней, левой и правой границ. можно использовать set_border() Или индивидуально используйте вызовы связанных методов, показанные выше, чтобы установить для них одно и то же значение.

Ниже показаны стили границ, отсортированные по номеру индекса XlsxWriter:

Index Name Weight Style
0 None 0
1 Continuous 1 -----------
2 Continuous 2 -----------
3 Dash 1 - - - - - -
4 Dot 1 . . . . . .
5 Continuous 3 -----------
6 Double 3 ===========
7 Continuous 0 -----------
8 Dash 2 - - - - - -
9 Dash Dot 1 - . - . - .
10 Dash Dot 2 - . - . - .
11 Dash Dot Dot 1 - . . - . .
12 Dash Dot Dot 2 - . . - . .
13 SlantDash Dot 2 / - . / - .

После этого мы также можем установить цвет и стиль четырех границ, имя интерфейса находится в передней таблице. Способ настройки такой же.

Эта библиотека пригодится, если вы хотите читать и редактировать файлы .xlsx, xlsm, xltx и xltm.

Установите openpyxl using pip. Общие рекомендации по установке этой библиотеки — сделать это в виртуальной среде Python без системных библиотек. Вы можете использовать виртуальную среду для создания изолированных сред Python: она создает папку, содержащую все необходимые файлы, для использования библиотек, которые потребуются для Python.

Перейдите в директорию, в которой находится ваш проект, и повторно активируйте виртуальную среду venv. Затем перейдите к установке openpyxl с помощью pip, чтобы убедиться, что вы можете читать и записывать с ним файлы:

Теперь, когда вы установили openpyxl, вы можете начать загрузку данных. Но что именно это за данные? Например, в книге с данными, которые вы пытаетесь получить на Python, есть следующие листы:



На первый взгляд, с этими объектами Worksheet мало что можно сделать. Однако, можно извлекать значения из определенных ячеек на листе книги, используя квадратные скобки [], к которым нужно передавать точную ячейку, из которой вы хотите получить значение.

Обратите внимание, это похоже на выбор, получение и индексирование массивов NumPy и Pandas DataFrames, но это еще не все, что нужно сделать, чтобы получить значение. Нужно еще добавить значение атрибута:


Помимо value, есть и другие атрибуты, которые можно использовать для проверки ячейки, а именно row, column и coordinate:

Атрибут row вернет 2;
Добавление атрибута column к “С” даст вам «B»;
coordinate вернет «B2».

Вы также можете получить значения ячеек с помощью функции cell (). Передайте аргументы row и column, добавьте значения к этим аргументам, которые соответствуют значениям ячейки, которые вы хотите получить, и, конечно же, не забудьте добавить атрибут value:


Обратите внимание: если вы не укажете значение атрибута value, вы получите <Cell Sheet3.B1>, который ничего не говорит о значении, которое содержится в этой конкретной ячейке.

Вы используете цикл с помощью функции range (), чтобы помочь вам вывести значения строк, которые имеют значения в столбце 2. Если эти конкретные ячейки пусты, вы получите None.
Более того, существуют специальные функции, которые вы можете вызвать, чтобы получить другие значения, например get_column_letter () и column_index_from_string.

В двух функциях уже более или менее указано, что вы можете получить, используя их. Но лучше всего сделать их явными: пока вы можете получить букву прежнего столбца, можно сделать обратное или получить индекс столбца, перебирая букву за буквой. Как это работает:


Вы уже получили значения для строк, которые имеют значения в определенном столбце, но что нужно сделать, если нужно вывести строки файла, не сосредотачиваясь только на одном столбце?

Конечно, использовать другой цикл.


Обратите внимание, что выбор области очень похож на выбор, получение и индексирование списка и элементы NumPy, где вы также используете квадратные скобки и двоеточие чтобы указать область, из которой вы хотите получить значения. Кроме того, вышеприведенный цикл также хорошо использует атрибуты ячейки!

Чтобы визуализировать описанное выше, возможно, вы захотите проверить результат, который вернет вам завершенный цикл:


Наконец, есть некоторые атрибуты, которые вы можете использовать для проверки результата импорта, а именно max_row и max_column. Эти атрибуты, конечно, являются общими способами обеспечения правильной загрузки данных, но тем не менее в данном случае они могут и будут полезны.


Это все очень классно, но мы почти слышим, что вы сейчас думаете, что это ужасно трудный способ работать с файлами, особенно если нужно еще и управлять данными.
Должно быть что-то проще, не так ли? Всё так!

Openpyxl имеет поддержку Pandas DataFrames. И можно использовать функцию DataFrame () из пакета Pandas, чтобы поместить значения листа в DataFrame:


Затем вы можете начать управлять данными при помощи всех функций, которые есть в Pandas. Но помните, что вы находитесь в виртуальной среде, поэтому, если библиотека еще не подключена, вам нужно будет установить ее снова через pip.

Чтобы записать Pandas DataFrames обратно в файл Excel, можно использовать функцию dataframe_to_rows () из модуля utils:


Но это определенно не все! Библиотека openpyxl предлагает вам высокую гибкость в отношении того, как вы записываете свои данные в файлы Excel, изменяете стили ячеек или используете режим только для записи. Это делает ее одной из тех библиотек, которую вам точно необходимо знать, если вы часто работаете с электронными таблицами.

И не забудьте деактивировать виртуальную среду, когда закончите работу с данными!

Теперь давайте рассмотрим некоторые другие библиотеки, которые вы можете использовать для получения данных в электронной таблице на Python.

Готовы узнать больше?

Чтение и форматирование Excel файлов xlrd
Эта библиотека идеальна, если вы хотите читать данные и форматировать данные в файлах с расширением .xls или .xlsx.


Если вы не хотите рассматривать всю книгу, можно использовать такие функции, как sheet_by_name () или sheet_by_index (), чтобы извлекать листы, которые необходимо использовать в анализе.


Наконец, можно получить значения по определенным координатам, обозначенным индексами.
О том, как xlwt и xlutils, соотносятся с xlrd расскажем дальше.

Запись данных в Excel файл при помощи xlrd

Если нужно создать электронные таблицы, в которых есть данные, кроме библиотеки XlsxWriter можно использовать библиотеки xlwt. Xlwt идеально подходит для записи и форматирования данных в файлы с расширением .xls.

Когда вы вручную хотите записать в файл, это будет выглядеть так:


Если нужно записать данные в файл, то для минимизации ручного труда можно прибегнуть к циклу for. Это позволит немного автоматизировать процесс. Делаем скрипт, в котором создается книга, в которую добавляется лист. Далее указываем список со столбцами и со значениями, которые будут перенесены на рабочий лист.

Цикл for будет следить за тем, чтобы все значения попадали в файл: задаем, что с каждым элементом в диапазоне от 0 до 4 (5 не включено) мы собираемся производить действия. Будем заполнять значения строка за строкой. Для этого указываем row элемент, который будет “прыгать” в каждом цикле. А далее у нас следующий for цикл, который пройдется по столбцам листа. Задаем условие, что для каждой строки на листе смотрим на столбец и заполняем значение для каждого столбца в строке. Когда заполнили все столбцы строки значениями, переходим к следующей строке, пока не заполним все имеющиеся строки.


В качестве примера скриншот результирующего файла:


Теперь, когда вы видели, как xlrd и xlwt взаимодействуют вместе, пришло время посмотреть на библиотеку, которая тесно связана с этими двумя: xlutils.

Коллекция утилит xlutils

Эта библиотека в основном представляет собой набор утилит, для которых требуются как xlrd, так и xlwt. Включает в себя возможность копировать и изменять/фильтровать существующие файлы. Вообще говоря, оба этих случая подпадают теперь под openpyxl.

Использование pyexcel для чтения файлов .xls или .xlsx

Еще одна библиотека, которую можно использовать для чтения данных таблиц в Python — pyexcel. Это Python Wrapper, который предоставляет один API для чтения, обработки и записи данных в файлах .csv, .ods, .xls, .xlsx и .xlsm.

Чтобы получить данные в массиве, можно использовать функцию get_array (), которая содержится в пакете pyexcel:


Однако, если вы хотите вернуть в словарь двумерные массивы или, иными словами, получить все листы книги в одном словаре, стоит использовать функцию get_book_dict ().

Имейте в виду, что обе упомянутые структуры данных, массивы и словари вашей электронной таблицы, позволяют создавать DataFrames ваших данных с помощью pd.DataFrame (). Это упростит обработку ваших данных!

Наконец, вы можете просто получить записи с pyexcel благодаря функции get_records (). Просто передайте аргумент file_name функции и обратно получите список словарей:


Записи файлов при помощи pyexcel

Так же, как загрузить данные в массивы с помощью этого пакета, можно также легко экспортировать массивы обратно в электронную таблицу. Для этого используется функция save_as () с передачей массива и имени целевого файла в аргумент dest_file_name:


Обратите внимание: если указать разделитель, то можно добавить аргумент dest_delimiter и передать символ, который хотите использовать, в качестве разделителя между “”.

Однако, если у вас есть словарь, нужно будет использовать функцию save_book_as (). Передайте двумерный словарь в bookdict и укажите имя файла, и все ОК:


Помните, что когда используете код, который напечатан в фрагменте кода выше, порядок данных в словаре не будет сохранен!

Чтение и запись .csv файлов

Если вы все еще ищете библиотеки, которые позволяют загружать и записывать данные в CSV-файлы, кроме Pandas, рекомендуем библиотеку csv:


Обратите внимание, что NumPy имеет функцию genfromtxt (), которая позволяет загружать данные, содержащиеся в CSV-файлах в массивах, которые затем можно помещать в DataFrames.

Финальная проверка данных

Когда данные подготовлены, не забудьте последний шаг: проверьте правильность загрузки данных. Если вы поместили свои данные в DataFrame, вы можете легко и быстро проверить, был ли импорт успешным, выполнив следующие команды:


Note: Используйте DataCamp Pandas Cheat Sheet, когда вы планируете загружать файлы в виде Pandas DataFrames.

Если данные в массиве, вы можете проверить его, используя следующие атрибуты массива: shape, ndim, dtype и т.д.:

Поздравляем, теперь вы знаете, как читать файлы Excel в Python :) Но импорт данных — это только начало рабочего процесса в области данных. Когда у вас есть данные из электронных таблиц в вашей среде, вы можете сосредоточиться на том, что действительно важно: на анализе данных.

Если вы хотите глубже погрузиться в тему — знакомьтесь с PyXll, которая позволяет записывать функции в Python и вызывать их в Excel.

Читайте также: