Интеграция Python и Excel: от встроенной функции до сторонних библиотек

Раздел: Автоматизация -> Работа с Excel

Способы интеграции Python и Excel

Как выполнить код Python непосредственно в ячейке Excel?

Самый современный способ — использование встроенной функции PY(), доступной в Excel для Microsoft 365 (Insider beta). Эта функция позволяет писать скрипты на Python прямо в формуле, обрабатывать данные из диапазонов и возвращать результат.

=PY("import pandas as pd\ndf = pd.DataFrame(xl('A1:D10'))\ndf.describe()")

код python в excel (код python в excel)

Внутри кавычек указывается многострочный код. Для доступа к данным ячеек используется объект xl(). Результатом может быть число, текст, массив или датафрейм. Excel автоматически отображает возвращённое значение.

Возможные проблемы:

  • Функция доступна только в бета-версии Microsoft 365. Более старые версии не поддерживают PY().
  • Для использования библиотек (pandas, numpy) требуется постоянное интернет-соединение, так как среда Python работает в облаке Microsoft.
  • Ошибка #VALUE! часто возникает из-за неверного синтаксиса или неподдерживаемого типа возвращаемого значения. Проверьте закрытие скобок и кодировку.

Как автоматизировать Excel с помощью Python вне ячейки (xlwings)?

Библиотека xlwings позволяет подключаться к запущенному экземпляру Excel из отдельного Python-скрипта или Jupyter Notebook. С её помощью можно читать, записывать данные, вызывать макросы и создавать пользовательские функции (UDF).

import xlwings as xw

# Подключение к активной книге
wb = xw.Book.caller()
sheet = wb.sheets['Лист1']

# Чтение диапазона
data = sheet.range('A1').expand().value
print(data)

# Запись нового значения
sheet.range('E1').value = 'Автоматизировано через Python'

Python работа с таблицами excel (работа с таблицами excel в python)

Установка: pip install xlwings. Для создания UDF требуется установить надстройку xlwings в Excel.

Типичные ошибки:

  • Если Excel не запущен, xlwings выдаст ошибку COMError. Перед запуском скрипта откройте нужную книгу или используйте xw.Book() для создания нового.
  • Для UDF при пересчёте листа могут отображаться ошибки #NAME? — проверьте, что надстройка xlwings активирована в Excel.

Как преобразовать данные с помощью Python в Power Query?

Power Query (Get & Transform) имеет возможность запускать Python-скрипты как шаг подготовки данных. Это удобно для сложной очистки, которую сложно выполнить встроенными средствами M.

# 'dataset' - входная таблица из Power Query
import pandas as pd
df = pd.DataFrame(dataset)
df['Дата'] = pd.to_datetime(df['Дата'])
df['Месяц'] = df['Дата'].dt.month
# Возвращаем датафрейм в Power Query
df

Excel скрипты python (скрипты python для excel)

В редакторе Power Query выберите Главная → Редактор → Запуск скрипта Python. Результат станет новой таблицей.

Проблемы:

  • Требуется установленный Python и библиотека pandas в системном интерпретаторе.
  • Если в скрипте возникает необработанное исключение, Power Query показывает ошибку Expression.SyntaxError. Проверьте синтаксис и типы данных.

Как генерировать файлы Excel из Python без запуска Excel (openpyxl)?

Библиотека openpyxl предназначена для создания и изменения файлов .xlsx без участия приложения Excel. Идеально подходит для серверной автоматизации.

from openpyxl import Workbook

wb = Workbook()
ws = wb.active
ws.title = 'Отчёт'
ws['A1'] = 'Дата'
ws['B1'] = 'Значение'
ws.append(['2024-01-01', 123])
wb.save('report.xlsx')

Установка: pip install openpyxl.

Типичные ошибки:

  • Ошибка FileNotFoundError при указании неверного пути к файлу.
  • При работе с большими файлами возможны проблемы с памятью — используйте режим write_only=True при создании.
- библиотека openpyxl python (библиотека openpyxl в python)
- Python excel openpyxl (работа с excel в python через openpyxl)

Расширенные примеры применения Python в Excel

Пример 1. Функция PY() для анализа данных из веб-API

Код загружает JSON с данными о курсах валют и возвращает курс доллара на текущую дату.

Пример
=PY("import requests\nimport pandas as pd\nresponse = requests.get('https://api.exchangerate-api.com/v4/latest/USD')\ndata = response.json()\npd.DataFrame(data['rates'].items(), columns=['Валюта','Курс']).head(5)")
Валюта  Курс
EUR     0.85
GBP     0.75
...

Пояснение: функция xl() не используется, так как данные берутся из интернета. Результат возвращается как массив, который Excel отображает динамически.

Пример 2. xlwings: пользовательская функция для скользящего среднего

Создадим UDF, которая принимает диапазон и окно, возвращает массив скользящего среднего.

Пример
import xlwings as xw

@xw.func
@xw.arg('values', pd.DataFrame)
@xw.ret(expand='table')
def moving_average(values, window):
    return values.rolling(window=window).mean()

После регистрации надстройки в Excel, в ячейке можно написать =moving_average(A1:A10, 3) и получить массив значений. Ошибка #VALUE! может возникнуть, если передан не числовой диапазон — добавьте @xw.arg('values', np.array) с проверкой.

Пример 3. Openpyxl: создание диаграммы и форматирование отчёта

Сформируем файл с данными о продажах и столбчатой диаграммой.

Пример
from openpyxl import Workbook
from openpyxl.chart import BarChart, Reference

wb = Workbook()
ws = wb.active
ws['A1'] = 'Месяц'
ws['B1'] = 'Продажи'
data = [['Январь', 150], ['Февраль', 200], ['Март', 170]]
for row in data:
    ws.append(row)

chart = BarChart()
chart.title = 'Продажи по месяцам'
chart.y_axis.title = 'Сумма'
data_ref = Reference(ws, min_col=2, min_row=1, max_row=4)
cats_ref = Reference(ws, min_col=1, min_row=2, max_row=4)
chart.add_data(data_ref, titles_from_data=True)
chart.set_categories(cats_ref)
ws.add_chart(chart, 'D2')
wb.save('sales_chart.xlsx')
Файл sales_chart.xlsx создан с таблицей и диаграммой.

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

Пример 4. Power Query + Python для обработки текста

Очистим столбец от лишних пробелов и специальных символов с помощью скрипта Python в Power Query.

Пример
# 'dataset' - столбец ['Текст'] из Power Query
import re
def clean_text(text):
    return re.sub(r'[^\w\s]', '', text).strip()

df = dataset.copy()
df['Чистый'] = df['Текст'].apply(clean_text)
df

В Power Query после применения скрипта появится новый столбец. Ошибка может возникнуть, если входные данные не являются текстом. Преобразуйте столбец в тип text перед запуском скрипта.

Код Python в Excel - comments

En
код python в excel (python)