OpenClaw и таблицы: анализ данных в Excel, Google Sheets, CSV

Таблицы — самый распространённый формат рабочих данных: выгрузка из 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/

Почему именно в /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 при сохранении. Загрузить книгу с этим флагом и сохранить — значит стереть все формулы, оставив только последние значения. Формулы в шаблоне после такого «улучшения» не восстановить.
  • Индексация. Excel нумерует строки и столбцы с единицы, pandas — с нуля. Сдвиг на единицу в отчёте выглядит как «пропала первая сделка».
  • Расчёт в Python вместо формул. Если результат должен жить в книге, в ячейку пишется формула =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() — какие колонки, где заголовки, в каком формате даты.
  • Зафиксировать правила в скилле. Что считается «сделкой», как называть месяцы, какие проверки обязательны. Формулировка «сделай как в прошлый раз» живёт ровно до первого нового сотрудника.
  • Посчитать кодом. pandas для анализа, openpyxl для формул и форматирования, recalc.py для пересчёта.
  • Проверить и отдать. Контрольные суммы, количество строк, отсутствие ошибок формул — и только потом файл плюс короткая текстовая сводка в чат.
  • Пример постановки задачи, который экономит несколько итераций:

    > Прочитай sales.xlsx, лист «Продажи». Колонки: A — дата, B — клиент, C — сумма, D — менеджер. Посчитай выручку по месяцам и менеджерам за 2026 год, найди трёх клиентов с падением больше 30% месяц к месяцу. Ничего не исправляй в данных: расхождения перечисли отдельным списком. Результат сохрани в pivot.xlsx и пришли сводку до 15 строк.

    Если поднимать всю обвязку — Python с pandas и openpyxl, LibreOffice для пересчёта, авторизацию Google — не хочется, есть путь без ручной сборки: платформа Neirohost даёт готового агента на OpenClaw с уже установленным окружением и доступом к файловой системе. Это один из вариантов старта, а не единственный: OpenClaw ставится и на собственный сервер, о различиях — в статье Установка OpenClaw на VPS.

    Где проходят границы

    Что агент на таблицах не сделает — и об этом лучше знать до запуска, а не после.

  • Макросы VBA. Книга с макросами читается как данные: формулы и значения видны, макросы не исполняются.
  • Сводные таблицы Excel. openpyxl не создаёт объекты PivotTable. Агрегаты считаются в pandas и выгружаются плоской таблицей — для чтения это обычно даже удобнее.
  • Картинки и объекты в ячейках. Иллюстрации, диаграммы и вставленные объекты не анализируются: агент видит значения, а не оформление.
  • Память процесса. На Linux у команд, запущенных через Gateway, есть ограничение по памяти на всё дерево процессов: меньшее из четверти памяти хоста и половины свободной после самого Gateway. При превышении процесс убивается с диагностикой memory-limit и указанием лимита в MiB. Для файла на сотни тысяч строк это реальный потолок — тогда считают частями или на отдельном воркере.
  • PTY в песочнице. Интерактивные утилиты в sandbox не работают: команды должны быть неинтерактивными, с флагами вместо диалогов.
  • Токен Google. Access token живёт около часа; 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 строк?

    Столько, сколько занимает не файл, а результат скрипта. Если агент читает файл с диска и печатает десять строк сводки, расход почти не зависит от размера таблицы. Если же данные заталкиваются в контекст целиком — расход растёт линейно и очень быстро упирается в лимит окна.

    Как убедиться, что цифры в отчёте верные?

    Требуйте от агента три вещи: сверку с контрольной суммой из исходного файла, сверку количества строк и пересчёт формул. Хорошая практика — попросить его показать сам скрипт расчёта: повторный запуск того же скрипта на том же файле должен дать тот же результат.

    Документация и ссылки

  • Скиллы и порядок их загрузки: docs.openclaw.ai/tools/skills
  • Инструмент exec и ограничения памяти: docs.openclaw.ai/tools/exec
  • Плагин tokenjuice: docs.openclaw.ai/tools/tokenjuice
  • Automations (расписание отчётов): docs.openclaw.ai/automation/cron-jobs
  • gogcli — Google Sheets из терминала: gogcli.sh
  • Скиллы для офисных форматов: github.com/vyakimov/openclaw-office-document-skills
  • Смежные материалы на openclawiki: OpenClaw для бухгалтерии и работы с документами, Настройка инструментов OpenClaw, Навыки (skills) в OpenClaw.