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

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

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

Войти
Новости: Часто задаваемые вопросы по LibreOffice и Apache OpenOffice.org
 
   Начало   Помощь Поиск Войти Регистрация    задать вопрос  
Страниц: « 1 2 3 4 »   Вниз
  Печать  
Автор Тема: Переписать код VBA под Libreoffice Basic по поиску в массиве  (Прочитано 4283 раз)
0 Пользователей и 1 Гость смотрят эту тему.
eugenefoxx
Участник
**
Offline Offline

Сообщений: 22


« Ответ #30: 9 Октябрь 2018, 21:43 »

mikekaganski,
Sub testRangeFormula
Dim t as integer
   n = Now()
   oSheet = ThisComponent.Sheets(0)
   r = oSheet.getCellRangeByName("L6:L15001") ' то же самое, что oSheet.getCellByPosition (11, (5..15000)+1)
   dim f(0 to r.Rows.Count-1, 0 to 0) as String
   For t = 0 to r.Rows.Count-1 'SAP склад
       f(t, 0) = "=IFERROR(VLOOKUP(B" & r.Rows(t).RangeAddress.StartRow + 1 & ";Sheet2.$O$1:$O$1048576;1; );"")"
   Next t
   r.setFormulaArray(f)
   
   MsgBox (Format(Now() - n, "Данные обработаны! с")
End Sub
спасибо за пример, шикарно.
Записан
eugenefoxx
Участник
**
Offline Offline

Сообщений: 22


« Ответ #31: 14 Октябрь 2018, 10:25 »

mikekaganski,
Sub testRangeFormula
Dim t as integer
   n = Now()
   oSheet = ThisComponent.Sheets(0)
   r = oSheet.getCellRangeByName("L6:L15001") ' то же самое, что oSheet.getCellByPosition (11, (5..15000)+1)
   dim f(0 to r.Rows.Count-1, 0 to 0) as String
   For t = 0 to r.Rows.Count-1 'SAP склад
       f(t, 0) = "=IFERROR(VLOOKUP(B" & r.Rows(t).RangeAddress.StartRow + 1 & ";Sheet2.$O$1:$O$1048576;1; );"")"
   Next t
   r.setFormulaArray(f)
   
   MsgBox (Format(Now() - n, "Данные обработаны! с")
End Sub
начал применять и тестировать ваш пример кода (помноженный в несколько раз). Есть следующее замечание. Да, время исполнения здесь выигрывает. Но, у меня сильно растет "потребление" оперативной памяти, минимум в три раза. Тестирую на Linux. Я полагаю, что этот метод создает "мусор", но его не убирает после завершения кода. Т.к. только после закрытия всего LO, память высвобождается, а файл, открытый заново, и сформированный с применением данного кода, имеет уже стандартный размер.
Записан
kompilainenn
Мастер
*****
Offline Offline

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



« Ответ #32: 14 Октябрь 2018, 10:38 »

Но, у меня сильно растет "потребление" оперативной памяти, минимум в три раза.
это критично?
Записан

Поддержать разработчиков LibreOffice можно тут, а наш форум вот тут
mikekaganski
Мастер
*****
Offline Offline

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


« Ответ #33: 14 Октябрь 2018, 10:39 »

Нужен пример, и ещё укажите, что Вы видите по потреблению (в числах).
Записан

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

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


« Ответ #34: 14 Октябрь 2018, 10:42 »

это критично?

Тут вопрос в том, баг ли это. Если это некая кэшированная память, которая не возврящается в свободный пул только потому, что памяти хватает, и реально эта память может быть использована для других целей - это один вариант (и не баг). Но если память действительно не высвобождается и остаётся занятой неиспользуемыми данными - это утечка, требующая фикса.
Записан

С уважением,
Михаил Каганский
eugenefoxx
Участник
**
Offline Offline

Сообщений: 22


« Ответ #35: 14 Октябрь 2018, 19:42 »

mikekaganski, пока скажу так. Вы сами попробуйте на файле, который я ранее прикладывал, запустить несколько раз этот код. Меня тогда еще смущала некоторая неоднозначность его поведения. Время исполнения там может существенно разница. Я хотел приложить для примера часть кода, на что сейчас жалуюсь. Но изолированно от другой части программы, он работает не критично. Могу сказать так, с каждой итерацией  он "набирает" приличные куски оперативной памяти (+3 гига).
« Последнее редактирование: 14 Октябрь 2018, 19:46 от eugenefoxx » Записан
eugenefoxx
Участник
**
Offline Offline

Сообщений: 22


« Ответ #36: 14 Октябрь 2018, 19:44 »

kompilainenn,
это критично?
может быть критично, если уткнется в потолок, так как разбухает используемая под него оперативная память прилично, а-ля +3 гига.
Записан
eugenefoxx
Участник
**
Offline Offline

Сообщений: 22


« Ответ #37: 18 Октябрь 2018, 19:00 »

По поводу проблем с излишним потреблением памяти, она проявляется только на моем домашнем ноутбуке, на работе (Debian, Windows 8) я такую проблему не замечал.
Записан
kompilainenn
Мастер
*****
Offline Offline

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



« Ответ #38: 18 Октябрь 2018, 21:58 »

только на моем домашнем ноутбуке
на котором ОС?
Записан

Поддержать разработчиков LibreOffice можно тут, а наш форум вот тут
eugenefoxx
Участник
**
Offline Offline

Сообщений: 22


« Ответ #39: 18 Октябрь 2018, 22:44 »

kompilainenn,
только на моем домашнем ноутбуке
на котором ОС?
Archlinux.
Записан
eugenefoxx
Участник
**
Offline Offline

Сообщений: 22


« Ответ #40: 21 Октябрь 2018, 09:47 »

Пробовал установить прямо с сайта deb пакет LibreOffice на Arch, эффект такой-же - "утечка памяти".
Записан
eugenefoxx
Участник
**
Offline Offline

Сообщений: 22


« Ответ #41: 22 Октябрь 2018, 14:29 »

Помогите в  рамках текущей запроса еще такую проблему решить. В Windows я в макросе открываю файл и формулой считываю данные со вставкой их в другую книгу. Но, вставляется сама формула, но не отображается результат. В Linux у меня такой проблемы нет. Этого как-то связано с пересчетом формул?
Записан
mikekaganski
Мастер
*****
Offline Offline

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


« Ответ #42: 22 Октябрь 2018, 14:37 »

Хм... у меня Win, и всё тестирую я, конечно, на нём. А конечный документ не имеет случайно включённую опцию ViewShow Formula? или формат ячеек, заранее выставленный в "Текст"?
Записан

С уважением,
Михаил Каганский
eugenefoxx
Участник
**
Offline Offline

Сообщений: 22


« Ответ #43: 22 Октябрь 2018, 14:51 »

mikekaganski, нет, View→Show Formula - не активна. Дело в том, если я "в ручном режиме" выставлю формулу, она все превосходно считывает и предоставляет результат. А в коде макроса нет.
Записан
mikekaganski
Мастер
*****
Offline Offline

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


« Ответ #44: 22 Октябрь 2018, 14:56 »

проблема версии?...
Записан

С уважением,
Михаил Каганский
Страниц: « 1 2 3 4 »   Вверх
  Печать  
 
Перейти в:  

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