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

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

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

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

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


iMac, LibreOffice и Apache OpenOffice


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

Код:
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
Мастер
*****
Offline Offline

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


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

Вот он.
Вот что значит пример. По вашему описанию я понял, что нужно сослаться на часть текста в ячейке, а оказывается все наоборот Улыбка
Записан

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

Сообщений: 83


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

Спасибо 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
Форумчанин
***
Offline Offline

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


WWW
« Ответ #18: 14 Сентябрь 2020, 15:41 »

Можно так:

Код:
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
Записан

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

Сообщений: 83


« Ответ #19: 14 Сентябрь 2020, 15:52 »

Супер. Отлично. Теперь задача решена.
Спасибо. Всё хорошо
Записан
Борис_С
Форумчанин
***
Offline Offline

Сообщений: 83


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

А все-таки один вопрос остался.
Код:
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
Форумчанин
***
Offline Offline

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


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

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

Код:
MsgBox oCursor.getString

Другое дело, что это выделение не визуализировано.
Записан

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

Сообщений: 83


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

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

Сообщений: 83


« Ответ #23: 15 Сентябрь 2020, 14:49 »

Я не прав. Действительно выделяются первые 3 символа.
Но замечание 2 остается в силе.
Записан
Борис_С
Форумчанин
***
Offline Offline

Сообщений: 83


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

Я понял, как выделить первые 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
Ubuntu 18.04 LTS
Форумчанин
***
Offline Offline

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


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

Данные в поле (ячейке) должны быть атомарными (неделимыми) - в идеале. Разбейте строку на две: ГОСТ и описание. Тогда и вопрос отпадет. Или не пойдет?
А сами решения интересные. В Excel приходилось выделять подстроку в ячейке, а как здесь я не знал... Теперь вижу.
« Последнее редактирование: 15 Сентябрь 2020, 22:11 от eeigor » Записан
Страниц: « 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!