Выделить весь текст в новом документе Writer

Автор gabix, 7 мая 2025, 13:02

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

gabix

Хочу следующее:
1. При открытом документе Writer создать новый пустой.
2. В новый документ вставить полный путь к исходному документу.
3. В новом документе выделить весь вставленный текст.

С помощью Питоньяка и ИИ получилось написать такой код:

    oDoc = ThisComponent
    newFileName = ConvertFromURL(oDoc.getLocation())
    oNewDoc = StarDesktop.loadComponentFromURL("private:factory/swriter", "_blank", 0, Array())
    oText = oNewDoc.getText()
    oCursor = oText.createTextCursor()
    oText.insertString(oCursor, "" & newFileName, False)
    oNewDoc.CurrentController.select(oNewDoc.Text)

Ошибок не выдаёт, но и того, чего хочу, полностью не выполняет. Новый документ с путём создаётся, но выделения текста не происходит. Ткните носом в то, что не так с oNewDoc.CurrentController.select(oNewDoc.Text). Спасибо!

sokol92

У меня выделяет нормально.

На всякий случай, "перещелкните" окна - может быть у Вас выделение не прорисовалось на экране.

Version: 25.2.3.2 (X86_64) / LibreOffice Community
Build ID: bbb074479178df812d175f709636b368952c2ce3
CPU threads: 6; OS: Windows 10 X86_64 (10.0 build 19045); UI render: Skia/Raster; VCL: win
Locale: ru-RU (ru_RU); UI: ru-RU
Calc: CL threaded
Владимир.

bigor

У меня в 7.6.4.1 вариант gabix не работает, такой работает
Sub Main
oDoc = ThisComponent
    newFileName = ConvertFromURL(oDoc.getLocation())
    oNewDoc = StarDesktop.loadComponentFromURL("private:factory/swriter", "_blank", 0, Array())
    oText = oNewDoc.getText()
    oCursor = oText.createTextCursor()
    oText.insertString(oCursor, "" & newFileName, False)
     
    oCursor.gotoStart(false)
    oCursor.gotoEnd(true)
oNewDoc.CurrentController.Select(oCursor)
End Sub
Поддержать наш форум можно здесь

sokol92

Метод select выделяет только те объекты, которые знает и может выделить, и возвращает True.
Если не знает или не может - возвращает False.

Ошибок при его вызове не возникает, поэтому лучше проверять код возврата (о чем я постоянно забываю  :)  ).
Владимир.

gabix

Sokol92, оказалось, что дело в версии: я работал в 7.6.4.1. Попробовал в 24.2.3.2 — заработало.

Bigor, предложенный вариант работает и в 7.6.4.1.

Спасибо вам за подсказки!

mikekaganski

#5
Проблема внесена в https://git.libreoffice.org/core/+/635448a996714a81cb15b41ac4bb0c73cabfb74f, исправлена в https://git.libreoffice.org/core/+/8f2de92b3da99346f7282e623d47912f40f92b7b.
Исправление включено уже в 7.6.7.
С уважением,
Михаил Каганский