Переписать код VBA под Libreoffice Basic по поиску в массиве

Автор eugenefoxx, 30 сентября 2018, 10:27

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

eugenefoxx

mikekaganski,
Цитата: mikekaganski от  9 октября 2018, 06:49Sub 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

mikekaganski,
Цитата: eugenefoxx от  9 октября 2018, 19:43Sub 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

Цитата: eugenefoxx от 14 октября 2018, 08:25Но, у меня сильно растет "потребление" оперативной памяти, минимум в три раза.
это критично?
Поддержать разработчиков LibreOffice можно тут, а наш форум вот тут

mikekaganski

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

mikekaganski

Цитата: kompilainenn от 14 октября 2018, 10:38
это критично?

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

eugenefoxx

#35
mikekaganski, пока скажу так. Вы сами попробуйте на файле, который я ранее прикладывал, запустить несколько раз этот код. Меня тогда еще смущала некоторая неоднозначность его поведения. Время исполнения там может существенно разница. Я хотел приложить для примера часть кода, на что сейчас жалуюсь. Но изолированно от другой части программы, он работает не критично. Могу сказать так, с каждой итерацией  он "набирает" приличные куски оперативной памяти (+3 гига).

eugenefoxx

kompilainenn,
Цитата: kompilainenn от 14 октября 2018, 08:38это критично?
может быть критично, если уткнется в потолок, так как разбухает используемая под него оперативная память прилично, а-ля +3 гига.

eugenefoxx

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

kompilainenn

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

eugenefoxx


eugenefoxx

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

eugenefoxx

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

mikekaganski

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

eugenefoxx

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

mikekaganski

С уважением,
Михаил Каганский