Добрый день. При сохранении файла из xlsx в ods, все внешни?...

Автор ForumOOo (бот), 12 ноября 2020, 11:50

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

economist

Цитата: CatPaws от 12 ноября 2020, 13:48В пустом столбце написать =ГИПЕРССЫЛКА([адресдохлойсслыки];[адресдохлойсслыки]) и протянуть вниз.

Выходит Ошибка 507 и 520. Если у меня таких 3000 разных адресов, мне всех их прописывать в формуле? Может есть макрос, который может выполнит действие что я описал изначально?

Файл Пример1 (формулой ГИПЕРССЫЛКА).ods вложил
Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...

bigor

И еще костыль, если есть текст перед ссылками как в первом примере
=HYPERLINK("htt"&TRIM(RIGHT(SUBSTITUTE(B2;"htt";REPT(" ";500));300));TRIM(LEFT(SUBSTITUTE(B2;"htt";REPT(" ";500));300)))
Поддержать разработчиков LibreOffice можно можно тут, а наш форум вот тут

eeigor

Цитата: kompilainenn от 12 ноября 2020, 15:45это может быть уже исправлено в последних версиях ЛО
В новой версии такое поведение сохраняется
Ubuntu 18.04 LTS • LibreOffice 7.5.1.2 Community

CatPaws

Цитата: sokol92 от 12 ноября 2020, 16:23
Можно выделить ячейки, в которые нужно занести гиперссылки, и выполнить макрос SelectionInsertHyperlink

Option Explicit
Sub SelectionInsertHyperlink
 Dim oCell
 For Each oCell In ThisComponent.CurrentSelection.queryVisibleCells.getCells
   CellInsertHyperLink oCell, ThisComponent
 Next oCell  
End Sub

Sub CellInsertHyperLink(oCell, oDoc)
 Dim oField, s As String, i As Long
 oField = oDoc.createInstance("com.sun.star.text.TextField.URL")
 s=oCell.getString
 i=Instr(1, s, "http")
 If i>0 Then
   oCell.setString Left(s, i-1)
   oField.Url=mid(s, i)
   oField.Representation=oField.Url
   oCell.Text.insertTextContent(oCell.Text.createTextCursor, oField, false)
 End If  
End Sub


Спасибо вам огромное, все получилось. Во всех выделенных строках при запуске данного макроса теперь активные ссылки.

eeigor

#19
Цитата: sokol92 от 12 ноября 2020, 16:23Можно выделить ячейки, в которые нужно занести гиперссылки...
Владимир, хороший пример. Вариант с "не выделять" и возможным наличием скрытых строк для активного листа:
  oRanges = ThisComponent.CurrentController.ActiveSheet _
  .queryContentCells(com.sun.star.sheet.CellFlags.STRING)
 For Each oCell In oRanges.Cells
     CellInsertHyperLink ...
 ...
Ubuntu 18.04 LTS • LibreOffice 7.5.1.2 Community

eeigor

#20
Вопрос к sokol92.
Владимир, подскажите, почему мы создаём экземпляр URL (интуитивно непонятно)?
oField = ThisComponent.createInstance("com.sun.star.text.TextField.URL")

Получается:
oField.Representation = oField.URL
Попробовал создать так:
oField = ThisComponent.createInstance("com.sun.star.text.TextField")
...данных нет (см. скриншот 1), и возникает ошибка времени выполнения.

Получается у объекта TextField.URL есть свойства: URL, Representation и т. д. (см. скриншот 2).
Странная модель... Или я чего-то не понял?


UPD: На скриншоте 2 видим, что <TextField.URL> возвращает объект типа ScEditFieldObj
Или URL - это объект типа ScEditFieldObj с одноимённым свойством URL типа String?

_____ List of supported services _____
com.sun.star.text.TextContent
com.sun.star.text.TextField

Я не программист, поясните, please.

P.S. В Excel как-то всё проще: collections (classes) со своими members (properties, methods, events) + enums (constants). И Object Browser в придачу.
Ubuntu 18.04 LTS • LibreOffice 7.5.1.2 Community

sokol92

Добрый день!
Попробую ответить.
1. Мы создаем экземпляр объекта с именем "com.sun.star.text.TextField.URL", поскольку нам нужна именно гиперссылка. Список имен для тектовых полей, которые можно задавать при обращении к методу CreateInstance, можно получить следующим макросом (и далее изучать):

Option Compatible
Option Explicit
Sub TestCreateInstanceText
  Dim v, vList, s As String
  vList=ThisComponent.getAvailableServiceNames
  For Each v In vList
    If v Like "com.sun.star.text*" Then
      s=s & v & chr(10)
    End If 
  Next v 
  Msgbox s
End Sub



2. Указанный выше объект com.sun.star.text.textField.URL имеет, в частности, свойства URL (гиперссылка) и Representation (текст для отображения гиперссылки). У меня в примере они одинаковы, поскольку так нужно автору темы.

3. В языке VBA нет средств для инспекции методов и свойств объектов (только, как Вы справедливо заметили, отладчик и "внешний" инструмент Object Browser), в LO Basic эту вопросу уделено большое внимание. Например, А.Питоньяк исключительно средствами Basic создал замечательный макрос Inspect.
Владимир.