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

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

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

Войти
Новости: Доступно и просто о работе в офисных пакетах
 
   Начало   Помощь Поиск Войти Регистрация    задать вопрос  
Страниц: « 1 2 3   Вниз
  Печать  
Автор Тема: Переписать код VBA под Libreoffice Basic по поиску в массиве  (Прочитано 2134 раз)
0 Пользователей и 1 Гость смотрят эту тему.
eugenefoxx
Участник
**
Offline Offline

Сообщений: 17


« Ответ #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

Сообщений: 17


« Ответ #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 464



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

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

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

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


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

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

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

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


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

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

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

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

Сообщений: 17


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

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

Сообщений: 17


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

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

Сообщений: 17


« Ответ #37: Вчера в 19:00 »

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

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



« Ответ #38: Вчера в 21:58 »

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

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

Сообщений: 17


« Ответ #39: Вчера в 22:44 »

kompilainenn,
только на моем домашнем ноутбуке
на котором ОС?
Archlinux.
Записан
Страниц: « 1 2 3   Вверх
  Печать  
 
Перейти в:  

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