Форум поддержки пользователей. LibreOffice, Apache OpenOffice, OpenOffice.org

Форум поддержки пользователей. LibreOffice, Apache OpenOffice, OpenOffice.org

27 Июнь 2017, 06:28 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
Новости: Здесь можно поблагодарить участников форума Улыбка
 
   Начало   Помощь Поиск Войти Регистрация    задать вопрос  
Страниц: 1   Вниз
  Печать  
Автор Тема: Последняя непустая колонка/строка в динамической таблице  (Прочитано 673 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Al_Ex
Новичок
*
Offline Offline

Сообщений: 30


« Стартовое сообщение: 12 Май 2017, 10:32 »

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

Пол: Мужской
Расположение: Киев
Сообщений: 2 275


Помогаю людям и компьютерам понимать друг друга


WWW
« Ответ #1: 12 Май 2017, 10:51 »

Добро пожаловать на форум!
Один из вариантов решения был приведен здесь
Записан

Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне
Al_Ex
Новичок
*
Offline Offline

Сообщений: 30


« Ответ #2: 12 Май 2017, 12:14 »

Спасибо, т.е. направление на курсор верное. Набросал функцию по примеру в сокращенном варианте, но в результате ничего не получаю.
Что-то пошло не так...
Код:
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)
« Последнее редактирование: 12 Май 2017, 12:21 от Al_Ex » Записан
rami
Гуру
*******
Offline Offline

Пол: Мужской
Сообщений: 2 102


MacBook Pro, LibreOffice и Apache OpenOffice


« Ответ #3: 12 Май 2017, 14:05 »

Как определить номер последнего непустого столбца/строки?
Следующий код запишет номер последнего используемого столбца в ячейку 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
Новичок
*
Offline Offline

Сообщений: 30


« Ответ #4: 12 Май 2017, 14:24 »

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

Пол: Мужской
Сообщений: 2 102


MacBook Pro, LibreOffice и Apache OpenOffice


« Ответ #5: 12 Май 2017, 14:32 »

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

Страниц: 1   Вверх
  Печать  
 
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!