Добавлено: Пт Окт 28, 2011 10:11 am Заголовок сообщения: Найти и заменить текст или формулу на листе Calc
По материалам http://community.i-rs.ru/index.php/topic,21535.0.html.
Суть проблемы:
В последних версиях OO/LO Office (с версии 2.х.х) вызов функций из пользовательских DLL перестал работать при простом помещении этой DLL в папку addin.
Точнее, функция из DLL вставляется (из списка функций) вручную в ячейку на листе Calc, но при закрытии и вновь открытии документа Calc эту функцию не находит и появляется ошибка, причем имя функции сбрасывается в нижний регистр.
В приведенной ссылке было предложено в качестве решения использовать функцию на Basic, которая просто присваивает этой функции из DLL новое имя и уже это новое имя вставляется в ячейку листа вместо оригинального из DLL.
Но возможно и другое решение, не требующее изменения имени функции.
Например, Тест() - имя оригинальной функция из DLL, в ячейке формула вызова этой функции =Тест(), после закрытия/открытия документа формула в ячейке =тест() (или даже ='тест'()) и появляется ошибка.
Можно написать макрос, который при открытии документа будет находить заменять имя функции с =тест() на =Тест(), что эквивалентно новой вставке правильной функции в ячейку.
Такой макрос следует повесить на событие "Открытие файла".
Код:
Sub fir
oCurrentSheet = ThisComponent.CurrentSelection.SpreadSheet
oReplace = oCurrentSheet.createReplaceDescriptor()
oReplace.SearchString = "='тест'(" '2-й вариант неправильного отображения формулы
oReplace.ReplaceString = "=Тест("
oCurrentSheet.replaceAll(oReplace)
End Sub
Такой макрос, конечно же, можно использовать и в других случаях, когда требуется найти и заменить формулу (или текст) на листе Calc.
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах