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

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

27 Февраль 2021, 20:58 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

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

Сообщений: 4


« Стартовое сообщение: 13 Август 2012, 13:54 »

Доброго времени суток.
У меня следующий вопрос:

я скрещиваю 1С  и OpenOffice - делаю печать.

С помощью createSearchDescriptor() и findFirst() нахожу в макете теги для дальнейшей замены на нужный текст.

Но вот возникла нужда определить позицию найденного текста.

Ищу с помощью следующего кода:

//xDocument - это документ OpenOffice

xSearchDescr = xDocument.createSearchDescriptor();
xSearchDescr.SearchString = ИдентификаторОбласти;
xSearchDescr.SearchCaseSensitive = Ложь;
xSearchDescr.SearchWords = Истина;
xFound = xDocument.findFirst(xSearchDescr);

ПозицияНачалаОбласти = xFound.End;

В 1С ПозицияНачалаОбласти - это COM Объект - можно ли как-то вернуть позицию цифрами?Непонимающий?
Имеется ввиду, можно ли вернуть не объект, коллекцию, выделенную область, а позицию - например область начинается с 150 символа или на 10 строке документа.
Или как-то еще.
« Последнее редактирование: 13 Август 2012, 15:38 от DrownedMan » Записан
Yakov
Администратор
**
Offline Offline

Сообщений: 2 567


WWW
« Ответ #1: 13 Август 2012, 20:50 »

http://codesnippets.services.openoffice.org/Writer/Writer.CountWordsOfTheSelectedTextWithOoRexx.snip
Записан
Hasim
Форумчанин
***
Offline Offline

Сообщений: 754

Woe from wit


« Ответ #2: 13 Август 2012, 21:24 »

Огромный недостаток этого способа: нужно использовать некий язык программирования ooRexx, которого почти никто не знает.
Записан
Yakov
Администратор
**
Offline Offline

Сообщений: 2 567


WWW
« Ответ #3: 13 Август 2012, 21:49 »

некий язык программирования ooRexx
Для начала заменить знаки ~ на .  и попробовать необходимый участок кода из примера использовать в 1С.
Это же только пример...
Записан
Hasim
Форумчанин
***
Offline Offline

Сообщений: 754

Woe from wit


« Ответ #4: 13 Август 2012, 22:38 »

Не тот пример, его название:
Count words of the selected text with ooRexx = Подсчет слов выделенного текста с (помощью) ooRexx.

А нужно найти положение искомого слова в тексте, т.е. которое оно по счету с начала текста.
Это совсем другая задача.

Записан
DrownedMan
Новичок
*
Offline Offline

Сообщений: 4


« Ответ #5: 14 Август 2012, 09:48 »

найти положение искомого слова в тексте, т.е. которое оно по счету с начала текста.
Именно над этим и бьюсь.
Записан
Yakov
Администратор
**
Offline Offline

Сообщений: 2 567


WWW
« Ответ #6: 14 Август 2012, 10:03 »

Код:

-- get access to the current selection
x_Model = x_Document.XModel
s_Container = x_Model.getCurrentSelection()


if s_Container <> NULL then

   -- if at least one selection has been made:
  
   -- get an index list of the selection
   x_IndexAccess = s_Container.XIndexAccess
   size = x_IndexAccess.getCount()

   -- iterate trough the selections and retrieve the selected strings
   --
   do counter = 1 to size
      s_text = x_IndexAccess.getByIndex(counter - 1)
      x_TextRange = s_text.XTextRange

      wordstring = x_TextRange.getString()

    

   end
end

counter - это и есть индекс от начала области выделения
« Последнее редактирование: 14 Август 2012, 10:11 от Yakov » Записан
Hasim
Форумчанин
***
Offline Offline

Сообщений: 754

Woe from wit


« Ответ #7: 14 Август 2012, 10:39 »

counter - это и есть индекс от начала области выделения
Фигня!
Очень внимательно прочитайте и переведите полные комментарии в оригинале, а не "обрезанные", как в последнем сообщении.

С помощью createSearchDescriptor и findFirst вы не получите нужного вам положения искомого текста в документе. findFirst может вернуть только Position (Position.X и Position.Y в пикселях), а оно вам надо?
« Последнее редактирование: 14 Август 2012, 10:44 от Hasim » Записан
DrownedMan
Новичок
*
Offline Offline

Сообщений: 4


« Ответ #8: 14 Август 2012, 11:14 »

С помощью createSearchDescriptor и findFirst вы не получите нужного вам положения искомого текста в документе. findFirst может вернуть только Position (Position.X и Position.Y в пикселях), а оно вам надо?

хм.....Может быть это и поможет
если к примеру я искал "Пример1" и "Пример2" в тесте, таким образом можно определить что в тексте находится раньше или выше?
Записан
Hasim
Форумчанин
***
Offline Offline

Сообщений: 754

Woe from wit


« Ответ #9: 14 Август 2012, 13:36 »

Я бы лучше воспользовался "прямым перебором" вроде того, который описан здесь Перебор символов текста текстовым и видимым курсорами

Цитата:
— Лёлик, это же неэстетично…
— Зато дёшево, надежно и практично!
Записан
DrownedMan
Новичок
*
Offline Offline

Сообщений: 4


« Ответ #10: 14 Август 2012, 14:35 »

Всем спасибо за подсказки
Выкружил следующим образом:

с помощью xDocument.Text.getText().String получил текст документа, а далее средствами 1С определился с позицией искомого слова с строке.
Записан
Страниц: 1   Вверх
  Печать  
 
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!