Таблицы — самый распространённый формат рабочих данных: выгрузка из CRM в CSV, план-факт в Excel, Google-таблица с заявками, отчёт маркетплейса в XLSX. OpenClaw и таблицы — это рабочий сценарий, в котором агент читает файл или лист Google Sheets, считает нужное кодом и возвращает готовую сводку, новый лист или заполненный шаблон. Ниже — какие инструменты за это отвечают, как настроить чтение XLSX и CSV, как подключить Google Sheets через gog и где проходят границы, за которыми цифрам агента верить нельзя.
Что такое анализ таблиц в OpenClaw
Анализ таблиц в OpenClaw — это настройка, при которой ИИ-агент получает доступ к файлам .xlsx, .xlsm, .csv, .tsv или к листу Google Sheets, разбирает структуру данных и выполняет расчёты запуском кода, а не «в уме». Ключевая характеристика: арифметику делает pandas, openpyxl, LibreOffice или Sheets API, а модель отвечает за постановку задачи, выбор колонок и формулировку вывода.
Из этого следует главное правило работы с таблицами: агент считает только тем инструментом, результат которого можно перепроверить. Сумма по 5000 строк, посчитанная «рассуждением» модели, — это не расчёт, а догадка. Сумма, посчитанная кодом, воспроизводится повторным запуском того же скрипта.
Почему цифры нельзя доверять модели напрямую
Языковая модель не имеет встроенного калькулятора: на длинных колонках она теряет разряды, путает знаки и «додумывает» пропущенные строки — при этом формулирует ответ так же уверенно, как и правильный. Поэтому в любой задаче с таблицей первым шагом должна идти команда, а не размышление.
Практическое правило, которое стоит зашить в системный промпт или скилл: если данных больше одной строки и в ответе нужна сумма, среднее, количество или сравнение — сначала скрипт, потом текст. Модель получает от скрипта готовые числа и уже их объясняет словами.
Второй эффект — экономия контекста. Файл на 40 000 строк, загруженный в модель целиком, съедает бюджет токенов и всё равно не умещается в окно. Скрипт читает его с диска и отдаёт агенту десять строк итогов. Разница в расходе — не проценты, а порядки; как это считать, разобрано в статье Стоимость OpenClaw.
Три канала доступа к табличным данным
Способ чтения зависит от того, где лежит файл. Это первое, что нужно определить, — от этого зависит и набор инструментов, и то, какие права придётся выдать.
| Источник | Инструмент | Когда использовать |
|---|---|---|
| Локальный файл XLSX, XLSM, CSV, TSV | скилл `xlsx` (pandas, openpyxl) через `exec` | файлы в рабочей папке, регулярные выгрузки, отчёты из 1С и маркетплейсов |
| Google Sheets | `gog sheets` из gogcli | таблица живёт в облаке, её правят несколько человек |
| Внутренняя система (CRM, склад, телефония) | API через `exec` или скилл-обёртку | данные меняются часто, выгрузка руками устаревает |
Механика доступа к инструментам описана в статье Настройка инструментов OpenClaw, а правила подключения своих скиллов — в Навыки (skills) в OpenClaw.
Локальные файлы: скилл xlsx
Для офисных форматов есть открытый набор скиллов vyakimov/openclaw-office-document-skills, внутри четыре каталога: docx, pptx, xlsx, pdf-reading. Скилл xlsx заявлен как средство для создания, чтения, правки, очистки, форматирования, пересчёта и конвертации .xlsx, .xlsm, .csv и .tsv.
Установка — копированием каталога в рабочее пространство агента:
cp -R skills/xlsx ~/.openclaw/workspace/skills/
Почему именно в , а не в общий каталог: у OpenClaw строгий порядок загрузки — сначала workspace, затем .agents/skills проекта, личные ~/.agents/skills, управляемые скиллы в каталоге состояния, и только потом встроенные. При совпадении имён побеждает источник с более высоким приоритетом, поэтому «нашу» версию правил для таблиц удобно держать в workspace, не задевая остальные.
Внутри скилла два обязательных шага, которые легко пропустить.
Инвентаризация перед расчётом. Перед любой работой агент должен посмотреть, что в файле: какие листы, где строка заголовков, в каком столбце даты. Для этого в скилле есть утилита extract-text:
extract-text input.xlsx | head -120
extract-text --format xlsx report.xlsm | head -120
Без этого шага агент начинает угадывать структуру — и получает сдвиг на строку заголовков, из-за которого потом «пропадают» первые записи.
Пересчёт формул. Если агент добавил или изменил формулы, их надо посчитать и проверить на ошибки:
python scripts/recalc.py output.xlsx 30
Скрипт прогоняет книгу через LibreOffice, сохраняет результат и заново открывает файл через openpyxl: считает формулы и возвращает JSON с перечнем ячеек-ошибок. Успешный ответ выглядит так:
{"status": "success", "total_errors": 0, "error_summary": {}, "total_formulas": 42}
Если в ответе errors_found — файл отдавать нельзя, пока не исправлены #REF!, #DIV/0!, #VALUE!, #N/A, #NAME?, #NULL! и #NUM!.
Три ловушки, на которых спотыкаются чаще всего:
data_only=True при сохранении. Загрузить книгу с этим флагом и сохранить — значит стереть все формулы, оставив только последние значения. Формулы в шаблоне после такого «улучшения» не восстановить.=SUM(B2:B9), а не готовое число: иначе при следующем изменении исходных данных отчёт останется старым.Google Sheets: gog (gogcli)
gog — консольный клиент Google Workspace от команды OpenClaw: один бинарник на Gmail, Календарь, Drive, Docs, Sheets, Slides и остальные сервисы. Для агента он удобен тем, что умеет отдавать машинный вывод (--json) и стабильный TSV (--plain).
Установка и авторизация занимают несколько шагов:
brew install openclaw/tap/gogcli
gog --version
gog auth credentials set ~/Downloads/client_secret_*.json
gog auth add you@gmail.com --services sheets
export GOG_ACCOUNT=you@gmail.com
gog auth doctor --check
Файл client_secret_*.json — это Desktop OAuth client из Google Cloud проекта, его нужно создать заранее. Для Sheets запрашиваются два скоупа: spreadsheets (работа с листами) и drive (экспорт через Drive).
Чтение диапазона:
gog sheets get 1AbC...xyZ 'Заявки!A1:F500' --render UNFORMATTED_VALUE --json
Флаг --render решает, что именно вернёт Google: FORMATTED_VALUE — то, что видно в ячейке (с валютами и процентами), UNFORMATTED_VALUE — «сырые» числа, FORMULA — текст формул. Для расчётов нужен второй вариант, иначе сумма «1 234,50 ₽» приедет строкой и не сложится.
Запись результата обратно в лист:
gog sheets update 1AbC...xyZ 'Сводка!A2:D20' --values-json @summary.json --fail-on-formula-error
--values-json принимает JSON-массив массивов, файл через @ или stdin через @-. Флаг --fail-on-formula-error заставляет команду перечитать записанный диапазон и упасть, если в ячейках появилась ошибка формулы, — это встроенная проверка вместо «на глаз». Флаг --input RAW (по умолчанию USER_ENTERED) определяет, будет ли Google интерпретировать строку как формулу: для чисел и дат из скрипта надёжнее RAW.
Полезное рядом:
gog sheets append — добавить строки в конец диапазона; значения передаются строками через запятую, ячейки внутри строки — через |: 'Новая задача|2|true'.gog sheets metadata — список листов и их размеры, чтобы не записывать в несуществующий диапазон.gog sheets export 1AbC...xyZ --format csv --out data.csv — выгрузить лист локально (есть также pdf и xlsx). Дальше с файлом работает скилл xlsx: для больших листов локальный расчёт дешевле, чем десятки запросов к API.gog --readonly — блокирует любые изменяющие запросы на уровне клиента. Для первого запуска агента на «живой» таблице это обязательная настройка: сначала чтение, потом запись.Отдельная возможность — структурные таблицы Sheets (gog sheets table): у них есть имя, типизированные колонки и привязанный диапазон, а gog sheets table append корректно расширяет таблицу, не задевая строку заголовков. Типы задаются именами из Sheets API: TEXT, DOUBLE, CURRENCY, PERCENT, DATE, BOOLEAN и другими; NUMBER и CHECKBOX не принимаются. Удаление таблицы требует отдельного флага --discard-data, потому что Sheets API стирает вместе со структурой все ячейки диапазона.
Выгрузки из систем: CSV как универсальный формат
Самый дешёвый путь почти всегда один: получить CSV и считать локально. Так делают с CRM, маркетплейсами и банковскими выписками — сценарии разобраны в статьях Интеграции OpenClaw с CRM и Автоматизация маркетплейсов в OpenClaw.
При чтении CSV от русского Excel нужно сразу проверять две вещи: разделитель (в локали с запятой как десятичным знаком Excel пишет ;) и кодировку (cp1251 в старых выгрузках, utf-8-sig в новых). Артикулы и телефоны надо читать строками, иначе pandas съест ведущие нули:
import pandas as pd
df = pd.read_csv("orders.csv", sep=";", encoding="utf-8-sig", dtype=str)
print(df.shape, list(df.columns[:10]))
Что реально автоматизируется: пять задач
Как свести несколько выгрузок в один отчёт
Типовая ситуация: три файла — заказы, справочник товаров, справочник клиентов. Агент соединяет их по ключу и собирает сводку по менеджерам и месяцам:
import pandas as pd
orders = pd.read_csv("orders.csv", sep=";", encoding="utf-8-sig", dtype=str)
items = pd.read_excel("items.xlsx", sheet_name="Номенклатура")
clients= pd.read_csv("clients.csv", sep=";", encoding="utf-8-sig", dtype=str)
orders["Сумма"] = pd.to_numeric(orders["Сумма"], errors="coerce")
df = (orders.merge(items[["Артикул","Категория"]], on="Артикул", how="left")
.merge(clients[["Код","Менеджер"]], on="Код", how="left"))
df["Месяц"] = pd.to_datetime(df["Дата"], dayfirst=True).dt.to_period("M")
report = (df.groupby(["Месяц","Менеджер"], dropna=False)
.agg(Заказов=("Номер","nunique"), Выручка=("Сумма","sum"))
.reset_index())
report.to_excel("report.xlsx", index=False)
print(report.tail(12).to_string(index=False))
Здесь важны три детали. errors="coerce" превращает битые суммы в NaN — и они всплывают при проверке, а не тихо превращаются в строки. dropna=False не даёт молча потерять строки, у которых не нашёлся менеджер. how="left" сохраняет все заказы, даже если товара нет в справочнике.
Как найти дубли, пропуски и аномалии
Проверки, которые агент делает до любых выводов и цифр:
print("строк:", len(df))
print("дубли целиком:", df.duplicated().sum())
print("дубли по номеру:", df.duplicated(subset=["Номер"]).sum())
print("пустые по колонкам:\n", df.isna().sum().sort_values(ascending=False).head(10))
print("суммы
Аномалии ищутся не «глазами модели», а правилом: сумма выше 99-го процентиля, дата в будущем, количество больше складского остатка, клиент с нулевой выручкой. Правило фиксируется в скилле, а не формулируется заново каждый запуск — иначе агент каждый раз будет проверять разное.
Как проверить, что агент не наврал в цифрах
Три независимых контроля, которые стоит требовать от любого табличного отчёта:
recalc.py для локальных книг, --fail-on-formula-error для Google Sheets.Отдельное правило: агенту нельзя разрешать «приводить данные к согласованному виду». Модель, которой дали такую инструкцию, рано или поздно подгонит число под ожидание — это уже искажение данных, а не автоматизация.
Как настроить регулярный отчёт по расписанию
Разовые запросы быстро превращаются в рутину, поэтому табличный отчёт логично ставить на расписание. В OpenClaw это делают automations — встроенный планировщик, который будит агента по cron-выражению и может доставить результат в чат:
openclaw automations create "0 8 * * 1-5" \
"Прочитай /data/reports/orders.csv и /data/reports/stock.xlsx. Сверь остатки с заказами, найди позиции с дефицитом. Сделай сводку до 10 строк." \
--name "Остатки: утренняя сводка" \
--session isolated
openclaw automations runs
Флаг --session isolated изолирует запуск от текущего диалога: цикл не подмешивает в контекст вашу переписку и не мусорит в основной сессии. Команда openclaw automations runs показывает историю запусков — по ней видно, отработал ли отчёт и что именно агент получил на входе.
Как не сжечь токены на большом файле
Три приёма, которые дают эффект быстрее любого «умного промпта».
Считать до чтения. Агент должен получать агрегаты, а не сырые строки: groupby, sum, head(20). Правило простое — если ответ скрипта больше 50 строк, его нужно свернуть.
Инвентаризация вместо полного чтения. extract-text file.xlsx | head -120 даёт структуру за копейки, тогда как загрузка всех листов в контекст — это десятки тысяч токенов.
Сжатие шумного вывода. Плагин tokenjuice укорачивает результаты exec уже после выполнения команды, не меняя саму команду и код возврата:
openclaw plugins install @openclaw/tokenjuice
openclaw config set plugins.entries.tokenjuice.enabled true
Важная оговорка: точное чтение содержимого файла плагин оставляет как есть — сжимаются шумные команды вроде инвентаризации каталога. То есть tokenjuice помогает не столько с таблицами, сколько с обвязкой вокруг них: поиском файлов, проверкой наличия библиотек, диагностикой окружения.
Пошаговый запуск: от файла к сводке
Порядок, который работает и для Excel, и для Google Sheets.
xlsx. Лист в облаке — gog sheets get или gog sheets export --format csv для локального расчёта.extract-text, gog sheets metadata или df.head() — какие колонки, где заголовки, в каком формате даты.recalc.py для пересчёта.Пример постановки задачи, который экономит несколько итераций:
> Прочитай sales.xlsx, лист «Продажи». Колонки: A — дата, B — клиент, C — сумма, D — менеджер. Посчитай выручку по месяцам и менеджерам за 2026 год, найди трёх клиентов с падением больше 30% месяц к месяцу. Ничего не исправляй в данных: расхождения перечисли отдельным списком. Результат сохрани в pivot.xlsx и пришли сводку до 15 строк.
Если поднимать всю обвязку — Python с pandas и openpyxl, LibreOffice для пересчёта, авторизацию Google — не хочется, есть путь без ручной сборки: платформа Neirohost даёт готового агента на OpenClaw с уже установленным окружением и доступом к файловой системе. Это один из вариантов старта, а не единственный: OpenClaw ставится и на собственный сервер, о различиях — в статье Установка OpenClaw на VPS.
Где проходят границы
Что агент на таблицах не сделает — и об этом лучше знать до запуска, а не после.
memory-limit и указанием лимита в MiB. Для файла на сотни тысяч строк это реальный потолок — тогда считают частями или на отдельном воркере.gog обновляет его по refresh-токену, но при длинных сериях запросов стоит проверять gog auth doctor --check.FAQ
Может ли OpenClaw сам поправить формулы в моём файле Excel?
Да, через openpyxl: агент читает книгу, меняет формулы и сохраняет файл, после чего прогоняет recalc.py и проверяет, что ни одна ячейка не вернула #REF!, #VALUE! или #DIV/0!. Ограничение одно: если книгу загрузили с data_only=True и сохранили, формулы исчезнут — этот режим годится только для чтения значений.
Нужен ли Python, если я не программист?
Писать код вам не придётся — его пишет агент, а вы формулируете задачу словами. Но окружение должно быть готово: pandas, openpyxl и LibreOffice для пересчёта формул. Проверить, что всё на месте, можно одной командой через exec; если чего-то нет, агент поставит пакеты сам.
Работает ли это с Яндекс Таблицами?
Напрямую gog их не поддерживает: он работает с Google Workspace. Для Яндекс Таблиц остаются два пути — API или выгрузка в XLSX/CSV, после чего расчёт идёт локально тем же скиллом xlsx. Второй вариант проще и не требует авторизации.
Сколько токенов съедает анализ таблицы на 10 000 строк?
Столько, сколько занимает не файл, а результат скрипта. Если агент читает файл с диска и печатает десять строк сводки, расход почти не зависит от размера таблицы. Если же данные заталкиваются в контекст целиком — расход растёт линейно и очень быстро упирается в лимит окна.
Как убедиться, что цифры в отчёте верные?
Требуйте от агента три вещи: сверку с контрольной суммой из исходного файла, сверку количества строк и пересчёт формул. Хорошая практика — попросить его показать сам скрипт расчёта: повторный запуск того же скрипта на том же файле должен дать тот же результат.
Документация и ссылки
exec и ограничения памяти: docs.openclaw.ai/tools/exectokenjuice: docs.openclaw.ai/tools/tokenjuiceСмежные материалы на openclawiki: OpenClaw для бухгалтерии и работы с документами, Настройка инструментов OpenClaw, Навыки (skills) в OpenClaw.