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

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

29 Апрель 2017, 10:25 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
Новости: Вы можете задать вопрос по LibreOffice или Apache OpenOffice  без регистрации, используя форму
 
   Начало   Помощь Поиск Войти Регистрация    задать вопрос  
Страниц: 1   Вниз
  Печать  
Автор Тема: Портирование VB-макроса на Python  (Прочитано 303 раз)
0 Пользователей и 1 Гость смотрят эту тему.
karpo518
Новичок
*
Offline Offline

Сообщений: 30


« Стартовое сообщение: 10 Апрель 2017, 08:33 »

Добрый день. Есть макрос на VB, который парсит текст. Макрос обходит текст посимвольно и выполняет много проверок для каждого символа, поэтому работает очень медленно.
1. Есть ли смысл портировать макрос на Python? Не ради продвинутых инструментов языка и синтаксического сахара, а ради производительности.
2. Можно ли запаковать макрос на Python в распространяемый пакет для установки? Нет ли с этим никаких сложностей?
Записан
mikekaganski
Старожил
****
Offline Offline

Пол: Мужской
Расположение: Хабаровск -> Москва
Сообщений: 406


« Ответ #1: 10 Апрель 2017, 08:52 »

VB?

Непонятно, что за "много проверок" имеются ввиду. Если это множество обращений к LO API, то вероятнее всего, ускорения не будет, поскольку эти обращения одинаково дороги из любого скриптового языка. А если Вы говорите об обработке, которая производится на стороне макроса, то там весьма возможно, что Python предоставляет встроенные/библиотечные функции, гораздо более производительные, чем BASIC (всё же предположу, что идёт речь о StarBASIC или по крайней мере VBA, но не VB). Нужно видеть код, чтобы сказать определённо.
Записан

С уважением,
Михаил Каганский
Yakov
Администратор
*
Offline Offline

Сообщений: 2 193


WWW
« Ответ #2: 10 Апрель 2017, 09:11 »

2. Можно ли запаковать макрос на Python в распространяемый пакет для установки? Нет ли с этим никаких сложностей?
Можно упаковать в  *.oxt -расширение LO/Apache Open Office.
Записан

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

Сообщений: 502


« Ответ #3: 10 Апрель 2017, 11:53 »

Ускорения в большинстве задач макросов VB, VBA, SB - на Python не будет, хотя, например, модуль re дает +30% скорости, sqlite3 по сравнению с ADO или sqlite3.exe +50% скорости итд.    

А вот кроссплатформенность, конвертация текста из/в любую кодировку, потенциал роста - да. Python неимоверно богат бесплатными библиотеками на все случаи жизни, его код в 5 раз понятнее и короче.

Проиллюстрирую похожим кейсом:

Я написал 10 кбайт кода демона-парсера-укладывателя TXT из 1С в SQLite на VBS+sqlite3.exe (за месяц, по часу в день). Код непростой (мониторинг папки на появление файлов опр. типа, нужна переразбивка почтовых адресов, исправление ошибок, склонение ФИО по падежам, удаление таблиц в СУБД и их пересоздание, обновление индексов итп.)

Потом, спустя квартал, это же всё, один-в-один, ради спортивного интереса - переписал на голом Python 3.5 (за неделю, по часу в день). Влезло всё в 1,5 кбайта, работать стало в 4 раза быстрее!

В отличие от написания кода на VBS, вслепую, без IDE, в редакторе FAR - в Питоне я шкодил на PyScrypter, с пошаговой отладкой, intellysense и прочими плюшками.

И удовольствия от процесса - получил тоже в 4 раза больше, благодаря именно Python.

Писать парсер на StarBasic можно, но недальновидно - язык длинен, тот же вечный цикл будет смотреться костылем итд.
« Последнее редактирование: 10 Апрель 2017, 12:01 от economist » Записан

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

Сообщений: 30


« Ответ #4: 19 Апрель 2017, 15:45 »

VB - это Visual Basic 6.0. Я зык программирования, который предоставляется по дефолту в последней версии OO как средство разработки макросов.
Записан
economist
Ветеран
*****
Offline Offline

Сообщений: 502


« Ответ #5: 20 Апрель 2017, 10:05 »

karpo518 - вы неправы, по дефолту в OpenOffice|LibreOffice язык программирования - StarBasic, он не имеет никакого отношения к VisualBasic, и является аналогом VBA для Microsoft Office, но работает в OpenOffice|LibreOffice.

Хотя часть конструкций языка (циклы, условия итп) почти 100% совпадает - основную сложность в программировании на StarBasic представляет использование объектной модели OpenOffice|LibreOffice и его API для работы с текстами, ячейками, формулами итп.

Сейчас StarBasic "понимает" примерно половину самых часто нужных команд из VBA в особом режиме совместимости. Для этого вверху текста модуля нужно написать:

Код:
Option VBASupport 1
Option Compatible
И один раз выполнить в этом модуле простой макрос:

Код:
Sub VBASupportON()
ThisComponent.BasicLibraries.VBACompatibilityMode=true 
End sub
Записан

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

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