Как выделить текст в ячейке

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

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

rami

Sub InsertHyperlink
Dim oCell, oField
oCell = ThisComponent.Sheets(0).getCellRangeByName("A2")
oField = ThisComponent.createInstance("com.sun.star.text.TextField.URL")
oField.Representation = "гиперссылка"            'текст гиперссылки
oField.URL = "https://forumooo.ru"               'ссылка

oCell.setString("Это простой текст; ")
oCell.Text.insertTextContent(oCell.Text.createTextCursor().getEnd(), oField, False)   'вставляем гиперссылку (после текста)
End Sub

bigor

Цитата: Борис_С от 11 сентября 2020, 15:07Вот он.
Вот что значит пример. По вашему описанию я понял, что нужно сослаться на часть текста в ячейке, а оказывается все наоборот :)
Поддержать разработчиков LibreOffice можно можно тут, а наш форум вот тут

Борис_С

Спасибо rami. Очень интересный код.
Есть только одно замечание. Гиперссылка при этом вставляется после текста. Это не очень удобно.
Я подкорректировал этот код:

Sub InsertHyperlink
Dim oCell, oField
oCell = ThisComponent.Sheets(0).getCellRangeByName("A2")
oField = ThisComponent.createInstance("com.sun.star.text.TextField.URL")
oField.Representation = "Это простой текст"     'текст гиперссылки
oField.URL = "https://forumooo.ru"                  'ссылка

oCell.setString("")
oCell.Text.insertTextContent(oCell.Text.createTextCursor().getStart(), oField, true)   'вставляем гиперссылку (после текста)
End Sub

При этом гиперссылка вставляется в текст ячейки.
Другую часть задачи - вставить гиперссылку в часть текста ячейки мне пока решить не удалось.

sokol92

Можно так:

Sub InsertHyperlink2
  Dim oCell, oField, oCursor
  oCell = ThisComponent.Sheets(0).getCellRangeByName("A2")
  oField = ThisComponent.createInstance("com.sun.star.text.TextField.URL")
  oField.Representation = "Это гиперссылка"     'текст гиперссылки
  oField.URL = "https://forumooo.ru"                  'ссылка

  oCell.setString("--><--")
  oCursor=oCell.Text.createTextCursor()
  oCursor.gotoStart(False)   ' на начало текста
  oCursor.goRight(3, False)  ' после третьего символа
  oCell.Text.insertTextContent(oCursor, oField, false)   'вставляем гиперссылку после 3-го символа текста
End Sub
Владимир.

Борис_С

Супер. Отлично. Теперь задача решена.
Спасибо. :beer:

Борис_С

А все-таки один вопрос остался.

Sub SelectTextInCell
    Dim oCell, oSheet, oCursor
    oSheet = thisComponent.CurrentSelection.getSpreadsheet
    oCell = oSheet.GetCellbyPosition(0, 0)
    ThisComponent.CurrentController.Select(oCell)   ' выделение ячейки
    oCell.setString("12345")
    oCursor=oCell.Text.createTextCursor()
    oCursor.gotoStart(False)   ' на начало текста
    oCursor.goRight(3, true)
End Sub

Почему этот код не выделяет первые 3 символа текста в ячейке?

sokol92

Выделяет! Добавьте в конец своего макроса одну строку:

MsgBox oCursor.getString

Другое дело, что это выделение не визуализировано.
Владимир.

Борис_С

Я проверил. У меня выделяется ячейка, а не первые 3 символа.
Это во-первых. А во-вторых, мне нужна визуализация, т.к. я вызываю диалоговое окно, и
для пользователя было бы удобно видеть, с каким фрагментом текста программа в этот момент работает.

Борис_С

Я не прав. Действительно выделяются первые 3 символа.
Но замечание 2 остается в силе.

Борис_С

Я понял, как выделить первые 3 символа.

Sub SelectTextInCell
    Dim oCell, oSheet, oCursor, oVCurs
    oSheet = thisComponent.CurrentSelection.getSpreadsheet
    oCell = oSheet.GetCellbyPosition(0, 0)
    ThisComponent.CurrentController.Select(oCell)   ' выделение ячейки
    oCell.setString("12345")
    oCursor=oCell.Text.createTextCursor()
    oCursor.gotoStart(False)   ' на начало текста
    oCursor.goRight(3, true)
    oCursor.CharBackColor = RGB(0,0,0)
    oCursor.CharColor = RGB(255,255,255)
    MsgBox oCursor.getString
    oCursor.CharColor = RGB(0,0,0)
    oCursor.CharBackColor = RGB(255,255,255)
End Sub

eeigor

#25
Данные в поле (ячейке) должны быть атомарными (неделимыми) - в идеале. Разбейте строку на две: ГОСТ и описание. Тогда и вопрос отпадет. Или не пойдет?
А сами решения интересные. В Excel приходилось выделять подстроку в ячейке, а как здесь я не знал... Теперь вижу.
Ubuntu 18.04 LTS • LibreOffice 7.4.3.2 Community