Создание таблиц Excel нейросетью: структура, формулы и файл XLSX
Модель описывает таблицу в JSON, а готовый XLSX с формулами, форматами и итогами собирает скрипт на openpyxl. Разбираем схему и код.
4 мин · · автоматизация · разработка
Самый частый способ получить таблицу от нейросети — попросить её нарисовать таблицу в чате и скопировать в Excel. Работает для пяти строк, а дальше формулы теряются, числа превращаются в текст, ширина столбцов плывёт. Надёжнее разделить работу: нейросеть для создания таблиц в Excel отвечает за содержание и структуру в JSON, а готовый файл XLSX собирает обычный скрипт. Ниже схема, рабочий код на Python и расчёт цены.
Почему не просить модель сразу «дай файл»
Языковая модель возвращает текст. XLSX — это архив с XML, и «написать» его текстом нельзя. Есть два пути получить файл:
- Попросить модель сгенерировать код (
openpyxl) и запустить его. Гибко, но выполнять чужой сгенерированный код без проверки небезопасно. - Попросить модель вернуть данные и описание структуры в фиксированном JSON, а код сборки написать самому один раз. Этот путь предсказуем: модель не может сделать ничего, кроме заполнения схемы, а вы проверяете JSON перед сборкой.
Второй вариант и разберём. Он подходит для смет, планов, прайс-листов, графиков отпусков, учёта расходов: везде, где важны столбцы, формулы и итоги.
Схема JSON
Договоримся о структуре, которую просим у модели:
{
"sheet_name": "Смета ремонта",
"columns": [
{"title": "Работа", "type": "text", "width": 34},
{"title": "Количество", "type": "int", "width": 14},
{"title": "Цена", "type": "money", "width": 14},
{"title": "Сумма", "type": "money", "width": 16}
],
"rows": [
["Шпаклёвка стен", 40, 350, null],
["Покраска потолка", 18, 420, null]
],
"formulas": {"Сумма": "=B{r}*C{r}"},
"totals": {"Сумма": "SUM"}
}Правила схемы: rows содержит значения по порядку столбцов, а для столбцов с формулой стоит null. В formulas ключ — название столбца, значение — шаблон с {r} вместо номера строки. В totals указана функция итога для столбца.
Запрос к модели
Самая дорогая модель для такой задачи обычно не нужна. В примерах gpt-6.1-sol, но можно взять claude-sonnet-5-5 или deepseek-v4.1-flash: проверьте на своих таблицах, какая вас устраивает. Код использует OpenAI SDK с base URL https://api.zukko.pro/v1:
import json, os, re
from openai import OpenAI
client = OpenAI(base_url="https://api.zukko.pro/v1", api_key=os.environ["ZUKKO_API_KEY"])
FENCE = "`" * 3 # тройной обратный апостроф, которым модель может обернуть JSON
SYSTEM = """Ты формируешь таблицы для Excel. Отвечай ТОЛЬКО одним JSON-объектом без пояснений и без markdown.
Схема: {"sheet_name": str, "columns": [{"title": str, "type": "text|int|money|percent|date", "width": int}],
"rows": [[...]], "formulas": {"<название столбца>": "=B{r}*C{r}"}, "totals": {"<название столбца>": "SUM|AVERAGE|MIN|MAX|COUNT"}}.
Правила: в rows для столбцов с формулой ставь null; даты в формате YYYY-MM-DD; в формулах используй английские имена
функций и запятую как разделитель аргументов; {r} заменяется номером строки."""
def ask_spec(task: str, model: str = "gpt-6.1-sol") -> dict:
for attempt in range(3):Мы не используем специальные режимы JSON, потому что их поддержка зависит от модели; вместо этого чистим возможные обёртки и повторяем запрос при ошибке разбора. Другие приёмы получения строгого JSON: структурированный JSON-ответ.
Сборка XLSX через openpyxl
Библиотека openpyxl ставится командой pip install openpyxl и умеет записывать значения, формулы, форматы и стили.
from datetime import date
from openpyxl import Workbook
from openpyxl.styles import Alignment, Font, PatternFill
from openpyxl.utils import get_column_letter
FORMATS = {"money": "#,##0.00", "int": "0", "percent": "0.0%", "date": "DD.MM.YYYY"}
ALLOWED_TOTALS = {"SUM", "AVERAGE", "MIN", "MAX", "COUNT"}
def build_xlsx(spec: dict, path: str) -> None:
cols = spec["columns"]
formulas = spec.get("formulas", {})
totals = spec.get("totals", {})
rows = spec["rows"]
Что здесь важно знать про формулы:
- в файл формулы записываются на английском с запятыми между аргументами (
=SUM(D2:D9)); Excel с русской локалью сам покажетСУММи точку с запятой; openpyxlне вычисляет формулы: значения появятся, когда файл откроют в Excel или другом табличном редакторе; если прочитать файл библиотекой сdata_only=Trueдо первого открытия, вместо чисел будетNone;- ссылки вида
B{r}привязаны к порядку столбцов, поэтому в промпте стоит просить модель использовать именно такую подстановку, а проверять буквы столбцов вы можете скриптом.
Если нужны только формулы к уже существующей таблице, а не вся таблица, смотрите как нейросеть пишет формулы Excel. А для разбора готовых данных — анализ CSV и таблиц.
Проверки перед открытием файла
Модель может ошибиться, а скрипт ошибок не заметит. Что стоит проверять автоматически:
- Число значений в каждой строке не больше числа столбцов.
- В числовых столбцах лежат числа, а не строки вроде
"1 200 ₽". - Все названия в
formulasиtotalsсовпадают с названиями столбцов. - Суммы по строкам сошлись с итогом (после открытия в Excel или пересчёта в LibreOffice).
И обязательно откройте результат глазами хотя бы первые разы: ошибка в логике сметы (скажем, неверная единица измерения) не исчезнет от красивого оформления.
Сколько это стоит
Нейросеть для создания таблиц в Excel бесплатно мы не обещаем: библиотека openpyxl бесплатна, а запрос к модели оплачивается. Зато он стоит копейки. Считаем по ценам на 18 октября 2026: запрос на 500 токенов входа (схема и задание) и 1 500 токенов выхода (JSON таблицы).
gpt-6.1-sol(0.27 / 1.32): 500 × 0.27 / 1 000 000 = $0.000135; 1 500 × 1.32 / 1 000 000 = $0.00198; итого $0.002115, около $0.0021.deepseek-v4.1-flash(0.013 / 0.038): 500 × 0.013 / 1 000 000 = $0.0000065; 1 500 × 0.038 / 1 000 000 = $0.000057; итого около $0.0000635.
Повторные попытки при ошибке JSON умножают эту сумму на число попыток. Актуальные цены: GET /v1/models. Подробнее про использование SDK: Python.
Частые вопросы
Может ли нейросеть сама создать файл XLSX?
Модель возвращает текст, поэтому файл собирает скрипт. Лучше всего работает схема «модель отдаёт JSON, openpyxl собирает файл».
Почему в ячейках нет значений, а видны только формулы?
openpyxl записывает формулы, но не вычисляет их. Значения появятся после открытия файла в Excel или LibreOffice.
Как сделать таблицу с несколькими листами?
Сделайте в схеме массив sheets с теми же полями и вызывайте сборку для каждого листа через wb.create_sheet(...). Для начала проверьте однолистовой вариант.
С чего начать?
Создайте ключ в кабинете, поставьте на него небольшой дневной лимит и запустите пример выше на своём задании.
zukko
Платите в 25×
меньше
за Claude Code & ChatGPT
Один ключ fetch_* и base URL api.zukko.pro — в Cursor, Claude Code, Codex и любом SDK.
Похожие статьи
- Перевод субтитров нейросетью: SRT без сбитых таймкодовГлавный риск при переводе SRT нейросетью — сломанная структура файла. Показываем схему, где таймкоды не попадают к модели, и скрипт на Python с проверкой.
- Редактирование текстов нейросетью: корректура, стиль и сокращениеРазные виды редактуры требуют разных промптов. Показываем формулировки для корректуры, стиля и сокращения, как получать правки с объяснением и не терять авторский голос.
- Нейросеть для написания скриптов: Bash, PowerShell и PythonМодель быстро пишет скрипты для рутины, но запускать их вслепую нельзя. Показываем, как ставить задачу, требовать безопасный режим dry-run и проверять результат до запуска.
- Dify в Docker: установка, первичная настройка и подключение моделейСтавим Dify через Docker Compose, создаём администратора и подключаем модели Claude, GPT и DeepSeek по одному ключу. Отдельно — что делать, если контейнеры не стартуют.