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

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

23 Ноябрь 2017, 15:53 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
Новости: Часто задаваемые вопросы по LibreOffice и Apache OpenOffice.org
 
   Начало   Помощь Поиск Войти Регистрация    задать вопрос  
Страниц: 1   Вниз
  Печать  
Автор Тема: Адрес активной ячейки  (Прочитано 804 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Al_Ex
Новичок
*
Offline Offline

Сообщений: 32


« Стартовое сообщение: 22 Май 2017, 17:24 »

Казалось бы, простой вопрос, на который пока не могу найти простого ответа.
Нужно получить адрес активной ячейки, нашел пока только такое решение: 
Код:
sheet.getCellByPosition(46, 4).AbsoluteName
Но здесь возвращаемое значение '$Sheet1.$AU$5', а нужно просто AU5.
Можно конечно обрезать лишнее, но нет ли более простого решения?
В Экселе это было вот так:
Код:
ActiveCell.Address(RowAbsolute:=False, ColumnAbsolute:=False)
P.S. Макрос на Python
Записан
Al_Ex
Новичок
*
Offline Offline

Сообщений: 32


« Ответ #1: 23 Май 2017, 10:11 »

Получилась такая конструкция, в принципе работает
Код:
active_cell_value_ref_input = sheet.getCellByPosition(1, 1).AbsoluteName[len(sheet.getName()) + 2:].replace('$','')
Записан
economist
Ветеран
*****
Offline Offline

Сообщений: 745


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

По лаконичности - можно и как в Excel
Код:
Option VBASupport 1

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

Записан

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

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


MacBook Pro, LibreOffice и Apache OpenOffice


« Ответ #3: 23 Май 2017, 15:13 »

По лаконичности - можно и как в Excel
Код:
Option VBASupport 1

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

Это процедура или функция Непонимающий или "дурофункция" Смеющийся



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

economist
Ветеран
*****
Offline Offline

Сообщений: 745


« Ответ #4: 23 Май 2017, 16:14 »

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

Код:
Option VBASupport 1
Option Compatible

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

...

End Function

Вообще, поддержка VBA в OpenOffice|LibreOffice на довольно хорошем уровне. Объектная модель - реализована от Application до уровня ячеек - почти на 100%, так что рекомендую.
« Последнее редактирование: 23 Май 2017, 16:19 от economist » Записан

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

Сообщений: 745


« Ответ #5: 23 Май 2017, 16:18 »

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

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

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

Сообщений: 32


« Ответ #6: 23 Май 2017, 16:37 »

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

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

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

Сообщений: 745


« Ответ #7: 23 Май 2017, 16:48 »

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

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

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

Сообщений: 32


« Ответ #8: 23 Май 2017, 16:57 »

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

Сообщений: 745


« Ответ #9: 23 Май 2017, 19:28 »

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

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

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

Счас меня зашикают старшие товарищи и разработчики - но увы, сделать я это сам не могу, поскольку нахожусь по другую сторону баррикад, в отряде "программирующих пользователей", и на этой стороне приношу больше пользы стране и конторе, где работаю.
« Последнее редактирование: 23 Май 2017, 19:32 от economist » Записан

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

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