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

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

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

Войти
Новости: Доступно и просто о работе в офисных пакетах
 
   Начало   Помощь Поиск Войти Регистрация    задать вопрос  
Страниц: « 1 2   Вниз
  Печать  
Автор Тема: Как узнать, есть ли гиперссылка в тексте ячейки  (Прочитано 1809 раз)
0 Пользователей и 1 Гость смотрят эту тему.
sokol92
Форумчанин
***
Offline Offline

Пол: Мужской
Сообщений: 196


WWW
« Ответ #15: 21 Сентябрь 2020, 16:27 »

Нумераторы идут по тексту последовательно (слева направо для русского языка), так что можно определить и номер вхождения искомого текста.
« Последнее редактирование: 21 Сентябрь 2020, 16:29 от sokol92 » Записан

Владимир.
Борис_С
Форумчанин
***
Offline Offline

Сообщений: 113


« Ответ #16: 22 Сентябрь 2020, 11:09 »

Все равно не очень понятно.
Я создал пример: записал в ячейку такой текст: a1a1a2a3
Поставил ссылку на первые 2 символа и на последние 2 символа.
Подкорректированный Ответ #4 выдает такой результат: a1  a3
Как тут понять какой a1 он имеет в виду: a1 c 1-ой или c 3-ей позиции?
Записан
economist
Форумчанин
***
Offline Offline

Сообщений: 1 298


« Ответ #17: 22 Сентябрь 2020, 15:36 »

Да, действительно, можно вытащить не только Url гиперссылки, но и текст гиперссылки,
но есть одно но. Как понять, где находится этот текст.

Пересоберите в коде из #4 весь текст ячейки, но уже  с гиперссылками и замените ячейку целиком.
Записан

Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...
Борис_С
Форумчанин
***
Offline Offline

Сообщений: 113


« Ответ #18: 22 Сентябрь 2020, 16:35 »

Я не понял, что вы имеете в виду. Если не сложно, приведите код (хотя бы минимальный)
Записан
Борис_С
Форумчанин
***
Offline Offline

Сообщений: 113


« Ответ #19: 23 Сентябрь 2020, 18:41 »

Я немного подкорректировал пример.
В ячейку записал такой текст: a1 a1 a2 a3
На первые 2 символа и на текст a2 повесил гиперссылки
Выделил эту ячейку
Подкорректировал код #4
Код:
Sub FindHyperLinkInCell
  Dim oCell, oText, oParEnum, oParElement
  Dim oEnum, oElement
  oCell = ThisComponent.getCurrentSelection()
  oParEnum = oCell.getText().createEnumeration()
  Do While oParEnum.hasMoreElements ()
    oParElement = oParEnum.nextElement()
    oEnum = oParElement.createEnumeration()
    Do While oEnum.hasMoreElements ()
      oElement = oEnum.nextElement()
      If oElement.TextPortionType = "TextField" Then
        If oElement.TextField.supportsService("com.sun.star.text.TextField.URL") Then
           Print "Текст  гиперссылки: " & oElement.TextField.Representation
        End If
      ElseIf oElement.TextPortionType = "Text" Then
           Print "Текст:  " & oElement.Text.String
      End If
    Loop
  Loop
End Sub

И получил такие результаты:
Текст гиперссылки: a1
Текст: a1 a1 a2 a3
Текст гиперссылки: a2
Текст: a1 a1 a2 a3
Текст: a1 a1 a2 a3

Кто-нибудь может объяснить мне, почему результаты такие?
Записан
sokol92
Форумчанин
***
Offline Offline

Пол: Мужской
Сообщений: 196


WWW
« Ответ #20: 23 Сентябрь 2020, 19:43 »

В Вашем примере нужно заменить
Код:
Print "Текст:  " & oElement.Text.String
на
Код:
Print "Текст:  " & oElement.String
и мир засияет яркими красками.
Записан

Владимир.
Bigor
Мастер
*****
Offline Offline

Пол: Мужской
Сообщений: 997


« Ответ #21: 23 Сентябрь 2020, 19:46 »

И Print отрабатывает 4 раза, а у вас почему то 5 в посте строк с выводом
Записан

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

Сообщений: 113


« Ответ #22: 23 Сентябрь 2020, 19:55 »

В Вашем примере нужно заменить
Код:
Print "Текст:  " & oElement.Text.String
на
Код:
Print "Текст:  " & oElement.String
и мир засияет яркими красками.
Да, все правильно. Теперь понятно, как определить положение гиперссылки в тексте.
Огромное спасибо.
Записан
sokol92
Форумчанин
***
Offline Offline

Пол: Мужской
Сообщений: 196


WWW
« Ответ #23: 23 Сентябрь 2020, 19:57 »

Успехов!
Записан

Владимир.
Борис_С
Форумчанин
***
Offline Offline

Сообщений: 113


« Ответ #24: 24 Сентябрь 2020, 12:25 »

Есть еще один вопрос по этой теме.
Есть метод insertTextContent, с помощью которого можно вставить гиперссылку в текст ячейки.
Есть ли аналогичный метод, который удаляет гиперссылку из текста или в этом случае нужно пересобирать весь текст ячейки?
Спасибо.
Записан
Bigor
Мастер
*****
Offline Offline

Пол: Мужской
Сообщений: 997


« Ответ #25: 24 Сентябрь 2020, 14:25 »

На листе 386 вышеуказанной книги Питоньяка есть removeTextContent(XTextContent) - Remove the specified text content from the text object. Правда это в главе 14, про Writer, но что мешает Вам проверить это в Calc Улыбка
Записан

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

Сообщений: 113


« Ответ #26: 29 Сентябрь 2020, 14:04 »

Не понимаю, как можно удалить гиперссылку с помощью этого метода.
Его аргумент - oField = ThisComponent.createInstance("com.sun.star.text.TextField.URL")
включает следующие свойства:
Format, URL, Representation, TargetFrame (https://www.openoffice.org/api/docs/common/ref/com/sun/star/text/textfield/URL.html)
Ни один из них (или их последовательность) однозначно не определяет гиперссылку.
Для этого, по моему мнению, нужно указать положение гиперссылки в документе.
Записан
Страниц: « 1 2   Вверх
  Печать  
 
Перейти в:  

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