Список форумов Форум Libreoffice

Форум Libreoffice

Добро пожаловать на Форум Libreoffice!
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 

English French German Italian Portuguese Russian Spanish
Найти и заменить текст или формулу на листе Calc

 
Начать новую тему   Ответить на тему    Список форумов Форум Libreoffice -> Basic
Предыдущая тема :: Следующая тема  
Автор Сообщение
RFJ



Репутация: +1    

Зарегистрирован: 02.08.2011
Сообщения: 59

СообщениеДобавлено: Пт Окт 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 = "=тест("      '1-й вариант неправильного отображения формулы
  oReplace.ReplaceString = "=Тест("
  oCurrentSheet.replaceAll(oReplace)

  oReplace.SearchString = "='тест'("   '2-й вариант неправильного отображения формулы
  oReplace.ReplaceString = "=Тест("
  oCurrentSheet.replaceAll(oReplace)
End Sub



Такой макрос, конечно же, можно использовать и в других случаях, когда требуется найти и заменить формулу (или текст) на листе Calc.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
neft



Репутация: 0    

Зарегистрирован: 19.10.2011
Сообщения: 28

СообщениеДобавлено: Пт Окт 28, 2011 10:32 am    Заголовок сообщения: Ответить с цитатой

Моя идея с переменованием функций функцией Basica попроще и поудобнее (ИМХО).
Код:
Function calctest() As Double

FuncAcc = createunoservice("com.sun.star.sheet.FunctionAccess")

calctest= FuncAcc.callFunction("Тест",array())

End Function


А вот для переименования сразу всех функций в ячейках с "оригинальных" имен на "новые" этот способ сгодится.
Код:
Sub fir
  oCurrentSheet = ThisComponent.CurrentSelection.SpreadSheet
  oReplace = oCurrentSheet.createReplaceDescriptor()
 
  oReplace.SearchString = "=Тест()"
  oReplace.ReplaceString = "=CALCTEST()"
  oCurrentSheet.replaceAll(oReplace)
End Sub
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
Начать новую тему   Ответить на тему    Список форумов Форум Libreoffice -> Basic Часовой пояс: GMT
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Powered by phpBB © 2001, 2005 phpBB Group
Вы можете бесплатно создать форум на MyBB2.ru, RSS