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

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

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

Борис_С

Всем доброго дня.
Подскажите, п-ста, как узнать, есть ли гиперссылка в тексте ячейки?
Спасибо.

bigor

В прошлой Вашей теме, здесь sokol92 давал ссылку на Питоньяка
Поддержать разработчиков LibreOffice можно можно тут, а наш форум вот тут

Борис_С

У Питоньяка есть пример чтения всех ссылок в ячейке. Это не совсем то, что мне нужно.
Мне нужно понять, установлена ли гиперссылка для выделенного текста в ячейке.

Борис_С

Для Writer я проверял наличие гиперссылки в тексте с помощью свойства HyperLinkURL для отображаемого курсора.
Для Calc есть только текстовый курсор. Я попробовал применить это свойство для текстового курсора, но получил исключение
Свойство или метод не найдены.

bigor

Да там где читают все, не проблема найти одну
Вот проверяйте, ищет в ячейках диапазона а1:а10

Sub FindHyperLinkInCell
  Dim oCell, oText, oParEnum, oParElement
  Dim oEnum, oElement
  for i=0 to 10
  oCell = ThisComponent.Sheets(0).getCellByPosition(0, i)
  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 "В ячейке A"& i+1 & "  гиперссылка " & oElement.TextField.URL
        End If
      End If
    Loop
  Loop
next
End Sub
Поддержать разработчиков LibreOffice можно можно тут, а наш форум вот тут

Борис_С

Наверное, я плохо объяснил мою задачу. Мне нужно по выбранному фрагменту текста в одной конкретной ячейке определить,
установлена ли гиперссылка на этот фрагмент.

Борис_С

Есть ли в Calc видимый курсор, аналогично видимому курсору в Writer?

sokol92

Аналог в Calc - активная ячейка (Active cell) на листе, которую еще не так-то просто определить макросом. :)
Владимир.

Борис_С

Активную ячейку не так сложно получить:

Dim oCell
oCell = ThisComponent.getCurrentSelection()

А вот как получить видимый курсор?

economist

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

sokol92

Цитата: Борис_С от 21 сентября 2020, 14:20Активную ячейку не так сложно получить:
Это если выделение содержит одну ячейку. Выделите (с помощью CTRL) несколько диапазонов и установите активную ячейку в нижний правый угол одного из них.
Владимир.

Борис_С

Цитата: sokol92 от 21 сентября 2020, 15:14
Цитата: Борис_С от 21 сентября 2020, 14:20Активную ячейку не так сложно получить:
Это если выделение содержит одну ячейку. Выделите (с помощью CTRL) несколько диапазонов и установите активную ячейку в нижний правый угол одного из них.
Я программно выделяю ячейку, поэтому я точно знаю, что работаю с одной ячейкой.

Борис_С

Цитата: economist от 21 сентября 2020, 15:11
Опишите задачу целиком, м.б. есть решение проще.
Я анализирую текст в ячейке и нахожу нужные фрагменты.
При этом мне нужно знать, поставлена ли на найденный фрагмент гиперссылка.
Если поставлена, я пропускаю этот фрагмент. Если нет, ставлю гиперссылку.

sokol92

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

Борис_С

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