eugenefoxx
Участник

Offline
Сообщений: 22
|
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
Сообщений: 22
|
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
|
Но, у меня сильно растет "потребление" оперативной памяти, минимум в три раза. это критично?
|
|
|
Записан
|
|
|
|
mikekaganski
|
Нужен пример, и ещё укажите, что Вы видите по потреблению (в числах).
|
|
|
Записан
|
|
|
|
mikekaganski
|
это критично?
Тут вопрос в том, баг ли это. Если это некая кэшированная память, которая не возврящается в свободный пул только потому, что памяти хватает, и реально эта память может быть использована для других целей - это один вариант (и не баг). Но если память действительно не высвобождается и остаётся занятой неиспользуемыми данными - это утечка, требующая фикса.
|
|
|
Записан
|
|
|
|
eugenefoxx
Участник

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

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

Offline
Сообщений: 22
|
По поводу проблем с излишним потреблением памяти, она проявляется только на моем домашнем ноутбуке, на работе (Debian, Windows 8) я такую проблему не замечал.
|
|
|
Записан
|
|
|
|
kompilainenn
|
только на моем домашнем ноутбуке на котором ОС?
|
|
|
Записан
|
|
|
|
eugenefoxx
Участник

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

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

Offline
Сообщений: 22
|
Помогите в рамках текущей запроса еще такую проблему решить. В Windows я в макросе открываю файл и формулой считываю данные со вставкой их в другую книгу. Но, вставляется сама формула, но не отображается результат. В Linux у меня такой проблемы нет. Этого как-то связано с пересчетом формул?
|
|
|
Записан
|
|
|
|
mikekaganski
|
Хм... у меня Win, и всё тестирую я, конечно, на нём. А конечный документ не имеет случайно включённую опцию View→Show Formula? или формат ячеек, заранее выставленный в "Текст"?
|
|
|
Записан
|
|
|
|
eugenefoxx
Участник

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