Как написать макрос Python, чтобы добавить гиперссылку в документ LibreOffice Writer?

Я пытаюсь написать макрос LibreOffice на Python, который добавляет гиперссылку к текущему выделению в документе Writer, и я не могу понять, как это сделать. Я использовал LO Object Inspector, чтобы определить, куда ведет гиперссылка, и у меня есть работающий код Python, который получает текущий выбор. Но я не могу понять, как модель данных Object Inspector сопоставляется с моделью Python UNO, и не нашел никакой документации, объясняющей это.

В документе Writer с выделенной одной непрерывной областью текста инспектор объектов показывает следующее. (Я исключил десятки свойств, которые не кажутся релевантными, для ясности переупорядочил родственные свойства и отформатировал каждое свойство как «PropertyName : type = value».)

      Current selection = class SwXTextRanges
    ElementType : type  = com.sun.star.text.XTextRange
    ImplementationName : string = "SwXTextRanges"
    SupportedServiceNames : string[1] = { "com.sun.star.text.TextRanges" }
    @0 : css.text.XTextRange= <Object@SwXTextRange>
        AvailableServiceNames : string[1] = { "com.sun.star.text.TextContent" }
        SupportedServiceNames : string[7] = { "com.sun.star.text.TextRange", ... } 
        ElementType : type = com.sun.star.text.XTextRange
        HyperlinkURL : string = ""
        ImplementationName : string = "SwXTextRange"
        String : string = "my selected text"

Основываясь на том, что показал мне Object Inspector, я ожидал использовать код Python, который выглядел примерно так:

      doc = XSCRIPTCONTEXT.getDocument()
sel = doc.getCurrentSelection()
sel0 = sel[0]
selText = sel0.String    # just a test to see if the property exists
sel0.HyperlinkURL = "www.foobar.com"

Когда я пытаюсь прочитать или назначить свойство HyperlinkURL, я получаю «AttributeError». Я пробовал это как в сценарии Python, так и в интерактивном режиме в консоли APSO. Находясь в консоли APSO, я обнаружил, что и sel, и sel0 относятся к классу «pyuno», а не к какому-то варианту [X]TextRange[s], как я ожидал. Я изучил справочник LibreOffice UNO API в поисках просветления, но пришел в еще большее замешательство, чем когда-либо. Я искал в справочнике по API слово «гиперссылка» и нашел его в трех местах: com.sun.star.report.XReportControlFormat, com.sun.star.style.CharacterProperties и com.sun.star.text.BaseFrameProperties. В справочнике по API утверждается, что CharacterProperties доступны из TextRange, но это не работает в Python.

Что я могу попробовать дальше?

Почему я хочу это сделать? Потому что у меня есть длинный список макросов LO, которые я хочу написать, некоторые из которых управляют гиперссылками, и мне нужно узнать, как различные инструменты и API сочетаются друг с другом. Я разрабатываю программное обеспечение на протяжении десятилетий, но это моя первая попытка написать макрос LO Python, который делает что-то полезное.

Почему Python, а не Бейсик? У меня был достаточно базового в течение многих лет, когда я использовал MS Office, и теперь, когда я, наконец, отказался от него в пользу LibreOffice, я собираюсь использовать «настоящий» язык для макросов.

Версия: LibreOffice 7.2.5.2 (x64) для Windows 10.0.18362.959

0 ответов

Другие вопросы по тегам