К содержимому

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

Python SDK: Worksheet: листы и ячейки

document.sheet(0) возвращает первый лист; выбор листа начинается с нуля, номера строк и столбцов: с единицы. Методы листа работают локально.

Примеры являются фрагментами тела def run(ctx):. Все методы SDK синхронны, await не нужен.

Как получить объект

document = ctx.documents().from_bytes('sku,price\nA-1,1250', 'report.csv')
sheet = document.sheet(0)

Методы

name

sheet.name() -> str

Аргументы не нужны.

Результат: str.

Имя листа в исходном файле.

result = sheet.name()

rows

sheet.rows() -> list[list[Any]]

Аргументы не нужны.

Результат: list[list[Any]].

Все строки без предположений о заголовках. Пустые строки и промежутки сохраняются. Строки и столбцы массива индексируются с нуля.

result = sheet.rows()

row_count

sheet.row_count() -> int

Аргументы не нужны.

Результат: int.

Количество извлечённых строк, включая пустые. Это не число записей: у файла могут быть заголовки, итоги и несколько секций.

result = sheet.row_count()

column_count

sheet.column_count() -> int

Аргументы не нужны.

Результат: int.

Ширина самой длинной извлечённой строки. У неполных строк недостающие ячейки остаются пустыми.

result = sheet.column_count()

cell

sheet.cell(address, resolve_merged=False) -> Any

Аргумент Тип Обязателен Назначение
address str Да Адрес ячейки, например B2.
resolve_merged bool Нет, default в сигнатуре Читать якорь объединённой области.

Результат: Any.

Читает ячейку по адресу вроде B2. При resolve_merged=True берёт значение верхней левой ячейки объединённой области. Допустимы адреса B2 и абсолютные маркеры $B$2; они читают ту же ячейку.

result = sheet.cell('B2', True)

row

sheet.row(number) -> list[Any]

Аргумент Тип Обязателен Назначение
number int Да Номер строки/страницы с единицы.

Результат: list[Any].

Строка по номеру с единицы. За пределами листа возвращает пустой массив; нулевой и отрицательный номер вызывают ошибку.

result = sheet.row(2)

column

sheet.column(column, start_row=1, end_row=None) -> list[Any]

Аргумент Тип Обязателен Назначение
column int | str Да Буквы либо номер столбца с единицы.
start_row int | None Нет, default в сигнатуре Первая строка данных с единицы, включительно.
end_row int | None Нет, default в сигнатуре Последняя строка данных с единицы, включительно.

Результат: list[Any].

Столбец по буквам или номеру с единицы. start_row и end_row включительны. Пропущенные значения сохраняются как None.

result = sheet.column('B')

range

sheet.range(value, resolve_merged=False) -> list[list[Any]]

Аргумент Тип Обязателен Назначение
value Any Да Значение по назначению метода; см. описание результата.
resolve_merged bool Нет, default в сигнатуре Читать якорь объединённой области.

Результат: list[list[Any]].

Прямоугольная матрица A1:C10, включая пустоты. До 50 000 ячеек. resolve_merged=True размножает значение якоря объединения только в возвращаемом массиве. Обратные и неверные диапазоны вызывают ошибку.

result = sheet.range('A1:B5')

non_empty_rows

sheet.non_empty_rows() -> dict[int, list[Any]]

Аргументы не нужны.

Результат: dict[int, list[Any]].

Непустые строки с исходными номерами в ключах с единицы. Значения 0 и False считаются данными, а не пустотой.

result = sheet.non_empty_rows()

find

sheet.find(text, exact=False, limit=100) -> list[dict[str, Any]]

Аргумент Тип Обязателен Назначение
text str Да Текст для разбора, поиска или ввода.
exact bool Нет, default в сигнатуре Требовать полное совпадение при поиске.
limit int Нет, default в сигнатуре Верхний предел числа совпадений, 1–1000.

Результат: list[dict[str, Any]].

Поиск по значениям без учёта регистра. exact=True требует полного совпадения. Возвращает address и value, максимум limit совпадений (1–1000). Формулы не исполняются и не участвуют в поиске вместо значений.

result = sheet.find('A-1', False, 100)

find_header

sheet.find_header(labels, max_rows=50) -> int | None

Аргумент Тип Обязателен Назначение
labels list[str] Да Список ожидаемых подписей колонок.
max_rows int Нет, default в сигнатуре Число строк поиска заголовка, 1–5000.

Результат: int | None.

Находит первую строку, в которой есть все перечисленные подписи. Сравнение без учёта регистра и пробелов по краям. По умолчанию проверяет первые 50 строк; max_rows от 1 до 5000. Если шапка не найдена, возвращает None. Для многоуровневой шапки используйте явные диапазоны.

result = sheet.find_header(['SKU', 'Price'], 50)

merged

sheet.merged() -> list[str]

Аргументы не нужны.

Результат: list[str].

Список объединений XLSX/XLS вида A1:C1. Значения остальных ячеек по умолчанию не дублируются. В CSV объединений нет.

result = sheet.merged()

formula

sheet.formula(address) -> str | None

Аргумент Тип Обязателен Назначение
address str Да Адрес ячейки, например B2.

Результат: str | None.

Исходный текст формулы XLSX с ведущим = или None. Расчётное значение читается через cell(), исходное выражение через formula(). Общие формулы зависимых ячеек могут не содержать полный текст: ориентируйтесь на сохранённое значение.

result = sheet.formula('B2')

error

sheet.error(address) -> str | None

Аргумент Тип Обязателен Назначение
address str Да Адрес ячейки, например B2.

Результат: str | None.

Сохранённая ошибка XLSX, например #DIV/0!, либо None. Не подменяет ошибку нулём.

result = sheet.error('B2')

records

sheet.records(header_row=1, start_row=None, end_row=None) -> list[dict[str, Any]]

Аргумент Тип Обязателен Назначение
header_row int Нет, default в сигнатуре Номер шапки с единицы; 0 даёт буквенные поля.
start_row int | None Нет, default в сигнатуре Первая строка данных с единицы, включительно.
end_row int | None Нет, default в сигнатуре Последняя строка данных с единицы, включительно.

Результат: list[dict[str, Any]].

Превращает выбранную секцию в записи. header_row задаёт шапку с единицы, start_row/end_row задают включительный диапазон данных. header_row=0 использует буквенные ключи A, B, C. Пустые строки пропускаются. Пустые подписи заменяются буквами, дубликаты получают суффиксы _2, _3 без потери полей. Итоги и примечания не распознаются автоматически: ограничьте диапазон явно.

result = sheet.records(1)

structure

sheet.structure() -> dict[str, Any]

Аргументы не нужны.

Результат: dict[str, Any].

Обезличенная структура для AI-плана: rows, columns, merged и sample первых 24×16 ячеек. sample содержит только e (пусто), s (строка), n (число), b (логическое). Имена листов, заголовки, значения, ссылки и формулы отсутствуют. Сам метод не вызывает модель.

result = sheet.structure()

calculation

sheet.calculation(address) -> str

Аргумент Тип Обязателен Назначение
address str Да Адрес ячейки, например B2.

Результат: str.

Статус пересчёта XLSX: calculated, unsupported, external_reference, circular_reference, error или limit. not_calculated означает, что формула есть, но пересчёт не проводился; not_formula означает обычную ячейку. Неподдерживаемые формулы дают явную ошибку, не ноль и не скрытую подмену старым значением.

result = sheet.calculation('B2')

cached_value

sheet.cached_value(address) -> Any

Аргумент Тип Обязателен Назначение
address str Да Адрес ячейки, например B2.

Результат: Any.

Значение, которое автор XLSX сохранил в файле до пересчёта. Оно может отсутствовать или устареть. Для обычной ячейки совпадает с cell(). Используйте только как явно выбранный резерв: по умолчанию SDK возвращает пересчитанные значения.

result = sheet.cached_value('B2')

Ошибки и контекст выполнения

Все вызовы синхронны. Неверный аргумент или формат данных может вызвать ValueError/TypeError; отказ платформы или недоступность сервиса вызывает RuntimeError. Отсутствие элемента/значения даёт None либо пустой список только там, где это явно описано. Не превращайте любое исключение в пустой успешный результат. Методы внешних сервисов недоступны в преобразовании выгрузки; см. ограничения преобразований и среду.