Python в Excel часть 1
Добрый день, уважаемые читатели блога! Как видно из названия статьи - сегодня поговорим о наболевшей ситуации запуска python кода в Excel.
Я столкнулся с невозможностью стандартными средствами запустить python код для обработки данных прямо в книге Excel.
Жадность корпорации Microsoft не знает границ, особенно в отношении пользователей России. Весь встроенный функционал (для работы с python) требует активной подписки на Office 365. Что делать если её нет? Использовать "Надстройки"!
Зачем вообще нужен python в Excel? Ответ прост - Excel как довольно "старая" программа, написанная на VBA, не может полностью удовлетворить современные требования к обработке данных и не предоставляет возможности, которые открывает python, но сама по себе удобна. Поэтому и будем их дружить.
Если будет интересно - про python буду писать ещё.
XLWINGS
Недолго погуглив, я обнаружил довольно простую в установке и использовании надстройку - Xlwings, её и буду использовать в дальнейшем.
Оговорюсь что нам понадобится для старта:
- MS Excel (у меня 365 без активной подписки);
- установленный python (у меня установлена версия 3.12.3)ссылка ведёт на версию 3.15 (для проверки кода локально, в надстройке установлена версия 3.14.2);
- сама надстройка xlwings (прикладываю ссылку на исходный код);
- включенный режим "Необязательных сетевых функций", Файл -> Учётная запись -> Параметры конфиденциальности -> Выставить галку у "Необязательные сетевые функции".

Итак, подготовительные этапы пройдены. Добавляем надстройку через магазин Office.

Как только надстройка установится, перезапускаем Excel и наблюдаем кнопку в ленте. Сразу оговорюсь - используем бесплатную версию Lite (кому интересно - есть платная).

Интерфейс и использование XLWINGS
Интерфейс прост и понятен:
- Меню надстройки;
- Запуск и параметры запуска python кода;
- вкладки со криптами python;
- код python;
- окно вывода результатов скрипта.

Если нажать на "Run Hello World" в ячейке А1 появится данный текст, на жёлтом фоне. Если нажать на треугольник после "Run Hello World" - появится список доступных параметров запуска, включая демонстрационные материла (диаграммы и "самописные" функции).

От нас "лишь" требуется написать правильный код на python! Один важный момент - это не полноценный python инстанс в приложении, а его максимально близкая адаптация под Excel. Поэтому в настройках нас также будет интересовать вкладка "requiremetns" - это список python пакетов, необходимый для работы надстройки.
Решение простых задач
Давайте попробуем решить простую задачу с помощью надстройки - вставить и оформить таблицу на лист.
Лист будет называться "График дежурств Октябрь 2026", таблица будет состоять из трёх столбцов: ФИО, должность, время начала смены, заголовок должен быть жирным, 14 размером шрифта.
В главном файле main.py вставляем следующий код:
import asyncio
import datetime as dtimport xlwings as xw
from xlwings import *@script(name="Добавление тестовой таблицы")
def format_table_insert_sample(book: xw.Book):# Добавляем новый лист
sheet = book.sheets.add("График дежурств октябрь 2026")# Добавляем заголовок
title_cell = sheet["A1"]
title_cell.value = "ФИО"
title_cell.font.bold = True
title_cell.font.size = 18
title_cell.font.color = "#000000"
title_cell.columns.autofit()
title_cell.font.name = "Times New Roman"
title_cell = sheet["B1"]
title_cell.value = "Должность"
title_cell.font.bold = True
title_cell.font.size = 18
title_cell.font.color = "#000000"
title_cell.columns.autofit()
title_cell.font.name = "Times New Roman"
title_cell = sheet["C1"]
title_cell.value = "Время начала смены"
title_cell.font.bold = True
title_cell.font.size = 18
title_cell.font.color = "#000000"
title_cell.columns.autofit()
title_cell.font.name = "Times New Roman"
#Добавляем в ячейки столбца А значения
sheet["A2"].options(index=False).value = "Иванов И.И"
sheet["A3"].options(index=False).value = "Петров П.П"
sheet["A4"].options(index=False).value = "Сидоров С.С"
#Устанавливаем ширину столбца по содержимому
sheet["A2"].options(index=False).autofit()
sheet["A3"].options(index=False).autofit()
sheet["A4"].options(index=False).autofit()#Аткивируем лист для перехода
sheet.activate()
Видим, что теперь кнопка запуска называется "Добавление тестовой таблицы", нажимаем и получаем результат.

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