Адрес активной ячейки

Автор Al_Ex, 22 мая 2017, 17:24

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

Al_Ex

Казалось бы, простой вопрос, на который пока не могу найти простого ответа.
Нужно получить адрес активной ячейки, нашел пока только такое решение: 

sheet.getCellByPosition(46, 4).AbsoluteName

Но здесь возвращаемое значение '$Sheet1.$AU$5', а нужно просто AU5.
Можно конечно обрезать лишнее, но нет ли более простого решения?
В Экселе это было вот так:

ActiveCell.Address(RowAbsolute:=False, ColumnAbsolute:=False)

P.S. Макрос на Python

Al_Ex

Получилась такая конструкция, в принципе работает

active_cell_value_ref_input = sheet.getCellByPosition(1, 1).AbsoluteName[len(sheet.getName()) + 2:].replace('$','')

economist

По лаконичности - можно и как в Excel

Option VBASupport 1

Sub getActiveCelladdress()
adr=ActiveCell.address
' так же можно [A5:C6], [Диапазончик] итд
End Function

Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...

rami

Цитата: economist от 23 мая 2017, 14:32
По лаконичности - можно и как в Excel

Option VBASupport 1

Sub getActiveCelladdress()
adr=ActiveCell.address
' так же можно [A5:C6], [Диапазончик] итд
End Function

Это процедура или функция ??? или "дурофункция" ;D



Эх, было бы хорошо так: Option PythonSupport 1  :roll: (вопрос был о Python, но такого раздела у нас нет, может когда-нибудь появится, если будет бодрый спрос и щедрое предложение)

economist

#4
Это копипаст, с ошибкой, сорри. Работает и как функция, но тогда еще надо в коде


Option VBASupport 1
Option Compatible

'-----------------------------------------------
Function СУММОЧКА(a as range) as double
ThisComponent.BasicLibraries.VBACompatibilityMode=true  

...

End Function


Вообще, поддержка VBA в OpenOffice|LibreOffice на довольно хорошем уровне. Объектная модель - реализована от Application до уровня ячеек - почти на 100%, так что рекомендую.
Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...

economist

Python, увы, пока не поддерживается в IDE OpenOffice|LibreOffice, а без полноценной отладки - шансов стать популярным нет. Плюс UNO-модель настолько сложная и неудобная, что отбивает охоту сразу.

Также не хватает прозрачной интеграции с внешним Питоном, а "встроенный" - опять же, полон чудес и загадок. Был б здорово поменять Pythonpath и получить рабочий интерпретатор, но увы.  
Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...

Al_Ex

Цитата: economist от 23 мая 2017, 16:18
Python, увы, пока не поддерживается в IDE OpenOffice|LibreOffice, а без полноценной отладки - шансов стать популярным нет. Плюс UNO-модель настолько сложная и неудобная, что отбивает охоту сразу.

Также не хватает прозрачной интеграции с внешним Питоном, а "встроенный" - опять же, полон чудес и загадок. Был б здорово поменять Pythonpath и получить рабочий интерпретатор, но увы. 

Возможно, я пошел сложным путем. Нужно прикрутить довольно большой и сложный макрос, написанный в Экселе, для Либры.
Сходу он не взлетел. Промучившись пару дней, решил переписать все на Питоне.
Настроил PyCharm + Libre + модуль UNO = как-то потихоньку идет, но очень уже тяжело без понимания каких-то методов работы с таблицей. К тому же и Питон я толком еще не освоил. В общем методом проб и ошибок...

economist

Тогда попробуйте макрос VBA переписать на смеси VBA+StarBasic. Она вполне быстро и внятно работает.
В #4 я привел код для максимальной совместимости. После однократного запуска ThisComponent.BasicLibraries.VBACompatibilityMode=true нужно файл переоткрыть и будет привычнее. К сожалению, нет ни одного свежего документа почитать про VBA-SB, так что только пробовать. Если макрос делает сложное форматирование, фильтрации итп - Python с PyUNO может дико тормозить.

Наибольшей скорости я достигал используя консольный Python для парсинга, расчетов итп, а затягивал результаты и форматировал на VBA+SB.   
Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...

Al_Ex

Даже не знаю, возможно вернусь еще к VBA + StarBasic, т.к. не дошел еще до самых сложных функций.
Но скорость мне не особо важна, т.к. макрос будет запускаться раз в день. Даже если он будет идти минут до 10 - не принципиально.

economist

#9
Но Python+PyUNO, да еще через PyCharm - точно сложный путь. Я для отладки использую PyScripter и только внешний Python, не из OLO.  

Если не использовать активно самые главные плюсы удава - срезы, списки, словари, try except else и что-то из библиотек (системную, re, sqlite3, win32com итп) - то все его преимущества поблекнут перед встроенным VBA/SB.

Кабы разработчики переписали объектную модель OLO под Python, без UNO - был бы другой основной язык автоматизации. А пока - кто в лес, кто по дрова.

Счас меня зашикают старшие товарищи и разработчики - но увы, сделать я это сам не могу, поскольку нахожусь по другую сторону баррикад, в отряде "программирующих пользователей", и на этой стороне приношу больше пользы стране и конторе, где работаю.
Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...