Python xlwings превосходит длину таблицы

Я работаю над автоматизацией своей работы в Excel. Большая часть того, что я пытаюсь сделать, это сравнить некоторые данные, чтобы определить, нужно ли их добавлять в какую-то систему или нет.

Точка, в которой я сейчас борюсь, - это поиск длины строки на листе Excel. Данные, которые поставляются через этот лист Excel, могут быть очень длинными, и я думаю, что это неаккуратное кодирование, если бы я позволил Python просто захватить все и вся в нем.

Я немного осмотрелся и нашел несколько предложений по использованию Range().vertical, но, похоже, его больше нет в xlwings.

Обходной путь, который я нашел, заключался в чтении полного листа, зацикливании его до тех пор, пока я не нашел ячейку, содержащую «Нет», затем остановке цикла, но это все еще кажется очень «не питоновым».

например. для данных, которые я использую

    A     B
    1 data1  stuff9
    2 data9  stuff4
    3 data3  stuff3
    4 data4  stuff2
    5

Я пытаюсь выяснить, сколько строк с данными имеет столбец A. В этом примере я должен найти 4 (как можно элегантнее)

Используя метод current_region и size, current_Region возвращает мне «1», size возвращает мне «1048576» (я думаю, что это максимум excel, поэтому он просто продолжает считать;)) и то же самое касается конечного метода.


person Janko    schedule 13.12.2016    source источник
comment
как насчет метода current_region? В сочетании с методом end?   -  person David Zemens    schedule 13.12.2016
comment
ах, кажется, я пропустил одну вещь во всей документации, которую я на самом деле искал (на самом деле ломал голову над этим около 4 часов ›.‹). Собираюсь дать ему спину   -  person Janko    schedule 13.12.2016
comment
@DavidZemens не курит по предложенным методам   -  person Janko    schedule 13.12.2016
comment
Вам следует показать свои усилия (код), а также уточнить, что означает отсутствие сигары/не работает (была ли это ошибка, если да, включите трассировку стека. Или ваши результаты расходятся с вашими ожиданиями? Если да , описать как и т.д.). Как новый пользователь здесь, вы, несомненно, были засыпаны напоминаниями о пересмотре таких вещей, как как спросить, и это ожидание что вопросы обычно должны соответствовать этим (довольно простым) рекомендациям :)   -  person David Zemens    schedule 13.12.2016


Ответы (1)


Я только что установил xlwings и потратил 5 минут на просмотр документации, и предложил вам два варианта:

import xlwings as xw
app = xw.apps[0]
book = app.books[0]
sheet = book.sheets[0]
rng = sheet.range('A1')

# This gives the last row in the TABLE'S current_region
# This will take additional columns in to consideration
rng.current_region.end('down').row

# This gives the last row in column A
rng.end('down').row

На основе данных вашего примера оба метода дают результат 4, но вы должны отметить различия, например, если в столбце B больше данных, то первый метод не подходит для определения "последней строки" в столбце A, он всегда будет возвращать последнюю строку всего объекта current_region.

person David Zemens    schedule 13.12.2016