Как узнать, есть ли гиперссылка в тексте ячейки

Автор Борис_С, 18 сентября 2020, 15:53

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

sokol92

#15
Нумераторы идут по тексту последовательно (слева направо для русского языка), так что можно определить и номер вхождения искомого текста.
Владимир.

Борис_С

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

economist

Цитата: Борис_С от 21 сентября 2020, 16:05Да, действительно, можно вытащить не только Url гиперссылки, но и текст гиперссылки,
но есть одно но. Как понять, где находится этот текст.

Пересоберите в коде из #4 весь текст ячейки, но уже  с гиперссылками и замените ячейку целиком.
Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...

Борис_С

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

Борис_С

Я немного подкорректировал пример.
В ячейку записал такой текст: 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

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

bigor

И Print отрабатывает 4 раза, а у вас почему то 5 в посте строк с выводом
Поддержать разработчиков LibreOffice можно можно тут, а наш форум вот тут

Борис_С

Цитата: sokol92 от 23 сентября 2020, 19:43
В Вашем примере нужно заменить
Print "Текст:  " & oElement.Text.String
на
Print "Текст:  " & oElement.String
и мир засияет яркими красками.
Да, все правильно. Теперь понятно, как определить положение гиперссылки в тексте.
Огромное спасибо.

sokol92

Владимир.

Борис_С

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

bigor

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

Борис_С

Не понимаю, как можно удалить гиперссылку с помощью этого метода.
Его аргумент - 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)
Ни один из них (или их последовательность) однозначно не определяет гиперссылку.
Для этого, по моему мнению, нужно указать положение гиперссылки в документе.