Заменить подстроку в текстовом документе без изменения стилей

Автор karpo518, 8 августа 2017, 11:24

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

karpo518

Добрый день. Необходимо сделать замену подстроки в конкретном Portion текстового документа и при этом сохранить его стили. Как это сделать? Ниже пример из документации (https://wiki.openoffice.org/wiki/Documentation/BASIC_Guide/Editing_Text_Documents). Проблема его в том, что присвоение TextPortion.String любого значения убивает все стили текста. В моем случае текст перестаёт быть жирным. Как сохранить форматирование заменяемой подстроки?


Dim Doc As Object
Dim Enum1 As Object
Dim Enum2 As Object
Dim TextElement As Object
Dim TextPortion As Object

Doc = ThisComponent
Enum1 = Doc.Text.createEnumeration

' loop over all paragraphs
While Enum1.hasMoreElements
  TextElement = Enum1.nextElement

  If TextElement.supportsService("com.sun.star.text.Paragraph") Then
    Enum2 = TextElement.createEnumeration
    ' loop over all sub-paragraphs

    While Enum2.hasMoreElements
      TextPortion = Enum2.nextElement
      MsgBox "'" & TextPortion.String & "'"
      TextPortion.String = Replace(TextPortion.String, "you", "U")
      TextPortion.String = Replace(TextPortion.String, "too", "2")
      TextPortion.String = Replace(TextPortion.String, "for", "4")
    Wend

  End If
Wend

Linux Mint 18 (64 bit),  LibreOffice 5.1.6.2

JohnSUN

Цитата: karpo518 от  8 августа 2017, 11:24
...присвоение TextPortion.String любого значения убивает все стили текста. В моем случае текст перестаёт быть жирным. Как сохранить форматирование заменяемой подстроки?
Как кричал Станиславский - НЕ ВЕРЮ!
Речь идёт действительно о стилях или о ручном форматировании? Этот самый код на моём тестовом примере отработал так, как и ожидалось
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

rami

Цитата: JohnSUN от  8 августа 2017, 09:42Как кричал Станиславский - НЕ ВЕРЮ!
Речь идёт действительно о стилях или о ручном форматировании? Этот самый код на моём тестовом примере отработал так, как и ожидалось
Свойство .String — содержит в себе строковые символы и влиять на что-либо другое кроме строковых символов не может. У меня тоже не меняет стили.

Могут быть условные стили или что-нибудь другое. Нужно смотреть документ.

economist

У меня стиль (жирность стиля) - в тексте после замены сохраняет. Тут у ТС 100500 ручное форматирование.
В Ctrl+H - Другие - Атрибуты нет никаких флажков по-умолчанию? На какой-то машине с Debian у меня было подобное, в интерактивном режиме получался подобный эффект.

Кстати, условные стили ни разу в живой природе не встречал, хотелось бы понять кейсы, когда они нужны.   
Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...

rami

Цитата: JohnSUN от  8 августа 2017, 09:42Как кричал Станиславский - НЕ ВЕРЮ!
Как Станиславский Станиславскому говорю: ВЕРЬ! Ты ещё и не такое увидишь на форуме :o

Начну с того, что для поиска и/или замены надо использовать дескриптор поиска или замены, а не перебор частей абзаца.

При замене строки у абзаца или части абзаца происходит изменение стиля символов, это мне кажется глюк.