Последняя непустая колонка/строка в динамической таблице

Автор Al_Ex, 12 мая 2017, 10:32

0 Пользователи и 1 гость просматривают эту тему.

Al_Ex

Всем привет!
В табличном документе есть динамическая таблица. Начальная точка статична. Как определить номер последнего непустого столбца/строки? Дальше нужно будет организовать цикл по этой таблице с обработкой данных, но это уже другая задача.
В VBA Excel это решалось одной строкой Cells(4, Columns.Count).End(xlToLeft).Column, где 4 = номер строки (статично).
Смотрю в сторону CellCursor, но не совсем понятно, как организовать проход курсора. Можно ли задать начальную точку и идти до последней непустой ячейки? Kак это реализовать в Python? Или есть другие методы, попроще?

JohnSUN

Добро пожаловать на форум!
Один из вариантов решения был приведен здесь
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

Al_Ex

#2
Спасибо, т.е. направление на курсор верное. Набросал функцию по примеру в сокращенном варианте, но в результате ничего не получаю.
Что-то пошло не так...

import ctypes
MessageBox = ctypes.windll.user32.MessageBoxW

def LastColumnNumber():
oDoc = XSCRIPTCONTEXT.getDocument()
oSheet = oDoc.CurrentController.ActiveSheet
oCellCursor = oSheet.createCursorByRange(oSheet.getCellRangeByName("M4"))
oCellCursor.collapseToCurrentRegion()
aRAddress = oCellCursor.getRangeAddress()
lastColumn = aRAddress.EndColumn
return lastColumn

test = LastColumnNumber()
MessageBox(None, test, 'Window title', 0)

rami

Цитата: Al_Ex от 12 мая 2017, 08:32Как определить номер последнего непустого столбца/строки?
Следующий код запишет номер последнего используемого столбца в ячейку A1:
def LastColumnNumber():
oDoc = XSCRIPTCONTEXT.getDocument()
oSheet = oDoc.CurrentController.ActiveSheet
oCellCursor = oSheet.createCursor()
oCellCursor.gotoEndOfUsedArea(False)
aRAddress = oCellCursor.getRangeAddress()
lastColumn = aRAddress.EndColumn
oSheet.getCellRangeByName("A1").setValue(lastColumn)

Al_Ex

Спасибо большое! Сработало то, что нужно, но есть 2 вопроса оффтопического характера:
1. Число возвращает на единицу меньше. Это из-за того, что нумерация идет, начиная с нуля? Т.е. по сути просто прибавлять единицу, чтобы получить результат, соответствующий видимому в таблице?
2. Я использовал для получения результата MessageBox, но по факту в него ничего не выводилось. Хотя до этого более простой вариант чтения из ячейки в MessageBox работал. Из-за этого я считал, что функция в принципе не работает. Но запись результата в ячейку setValue срабатывает и дает верный результат. Где тут подвох?

rami

1. Да, нумерация идёт с нуля, а число столбцов на единицу больше.
2. Готового MessageBox в Python нет, нужно или создавать самому или импортировать. У меня на Маке нет некоторых библиотек как на винде.