Создание таблиц Excel нейросетью: структура, формулы и файл XLSX

Модель описывает таблицу в JSON, а готовый XLSX с формулами, форматами и итогами собирает скрипт на openpyxl. Разбираем схему и код.

4 мин · · автоматизация · разработка

Самый частый способ получить таблицу от нейросети — попросить её нарисовать таблицу в чате и скопировать в Excel. Работает для пяти строк, а дальше формулы теряются, числа превращаются в текст, ширина столбцов плывёт. Надёжнее разделить работу: нейросеть для создания таблиц в Excel отвечает за содержание и структуру в JSON, а готовый файл XLSX собирает обычный скрипт. Ниже схема, рабочий код на Python и расчёт цены.

Почему не просить модель сразу «дай файл»

Языковая модель возвращает текст. XLSX — это архив с XML, и «написать» его текстом нельзя. Есть два пути получить файл:

  1. Попросить модель сгенерировать код (openpyxl) и запустить его. Гибко, но выполнять чужой сгенерированный код без проверки небезопасно.
  2. Попросить модель вернуть данные и описание структуры в фиксированном JSON, а код сборки написать самому один раз. Этот путь предсказуем: модель не может сделать ничего, кроме заполнения схемы, а вы проверяете JSON перед сборкой.

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

Схема JSON

Договоримся о структуре, которую просим у модели:

bash
{
  "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:

bash
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 и умеет записывать значения, формулы, форматы и стили.

bash
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. Число значений в каждой строке не больше числа столбцов.
  2. В числовых столбцах лежат числа, а не строки вроде "1 200 ₽".
  3. Все названия в formulas и totals совпадают с названиями столбцов.
  4. Суммы по строкам сошлись с итогом (после открытия в 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.