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

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

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

Войти
Новости: Часто задаваемые вопросы по LibreOffice и Apache OpenOffice.org
 
   Начало   Помощь Поиск Войти Регистрация    задать вопрос  
Страниц: 1   Вниз
  Печать  
Автор Тема: Найти маркированные списки в в файле .doc  (Прочитано 3836 раз)
0 Пользователей и 1 Гость смотрят эту тему.
karpo518
Форумчанин
***
Offline Offline

Сообщений: 51


« Стартовое сообщение: 28 Октябрь 2016, 17:11 »

Добрый день. Подскажите, в каком свойстве хранится информация о том, что параграф является маркированным списком. Как при обычном обходе параграфов распознать элементы маркированного списка?
Код:
Do While oCursor.gotoEndOfParagraph(True)
    If oDoc.Text.compareRegionEnds(oCursor, oRCurs) < 0 Then Exit Do
        If Not oCursor.IsCollapsed() Then
            paraText = oCursor.getString()
        End If
    End If
    oCursor.gotoNextParagraph(False)
Loop

Или хотя бы через createSearchDescriptor можно как-нибудь найти списки?
« Последнее редактирование: 31 Октябрь 2016, 19:53 от bormant » Записан

Linux Mint 18 (64 bit),  LibreOffice 5.1.6.2
rami
Гуру
*******
Offline Offline

Пол: Мужской
Сообщений: 3 061


iMac, LibreOffice и Apache OpenOffice


« Ответ #1: 28 Октябрь 2016, 19:54 »

Или хотя бы через createSearchDescriptor можно как-нибудь найти списки?
Нет.
Подскажите, в каком свойстве хранится информация о том, что параграф является маркированным списком.
У каждого маркированного или нумерованного абзаца есть не пустое свойство NumberingStyleName, но отличить маркированный абзац от нумерованного можно по свойству ListLabelString — у маркированного абзаца оно пустое, а у нумерованного содержит символ нумерации.
Как при обычном обходе параграфов распознать элементы маркированного списка?
Элементы маркированного списка можно увидеть в самом стиле, а не в параграфе.

Напишите подробней что хотите сделать и что найти.
Записан

karpo518
Форумчанин
***
Offline Offline

Сообщений: 51


« Ответ #2: 31 Октябрь 2016, 10:49 »

Спасибо за ответ. Я пишу расширение, которое оборачивает документ в теги html. Обхожу параграфы/абзацы при помощи текстового курсора. При таком обходе у меня в текстовый курсор элемент маркированный список попадает как отдельный параграф. Но как узнать, что это элемент списка и если это он, то как узнать, какого типа список. Можете привести пример кода для моего фрагмента макроса?
Записан

Linux Mint 18 (64 bit),  LibreOffice 5.1.6.2
rami
Гуру
*******
Offline Offline

Пол: Мужской
Сообщений: 3 061


iMac, LibreOffice и Apache OpenOffice


« Ответ #3: 31 Октябрь 2016, 13:27 »

Вот пример:
Код:
Sub main
Dim p   'параграф
Dim oEnum
oEnum=ThisComponent.Text.createEnumeration()
Do While oEnum.hasMoreElements
p=oEnum.nextElement           'перебор параграфов
If p.NumberingIsNumber Then   'если это какой-то список
If p.ListLabelString="" Then
msgbox p.String,1,"маркированный список"  'здесь обрабатывать найденный параграф, если маркированный список
Else
msgbox p.String,1,"нумерованный список"   'здесь обрабатывать найденный параграф, если нумерованный список
End If
End If
Loop
End Sub
Записан

karpo518
Форумчанин
***
Offline Offline

Сообщений: 51


« Ответ #4: 31 Октябрь 2016, 15:32 »

К сожалению, условия
Код:
If p.NumberingIsNumber Then

недостаточно в моём случае. Абзацы оформленные как "Heading 1", "Heading 2" тоже имеют это свойство. Требуется более точное условие.

Пока буду использовать костыль

Код:
If oCursor.NumberingIsNumber And oCursor.ParaStyleName ="Text body"

Есть более корректный вариант?

Проблема №2:

Свойство нельзя использовать для отключения формата списка. Если задать для всех элементов списка NumberingIsNumber = False, то такое действие нельзя отменить по ctrl + z, значит структура документа ломается. Как можно отключить стили маркерованного и нумерованного списка?
« Последнее редактирование: 31 Октябрь 2016, 16:38 от karpo518 » Записан

Linux Mint 18 (64 bit),  LibreOffice 5.1.6.2
rami
Гуру
*******
Offline Offline

Пол: Мужской
Сообщений: 3 061


iMac, LibreOffice и Apache OpenOffice


« Ответ #5: 31 Октябрь 2016, 16:45 »

недостаточно в моём случае. Абзацы оформленные как "Heading 1", "Heading 2" тоже имеют это свойство. Требуется более точное условие.
Естественно, заголовки с нумерацией распознаются как нумерованные списки и их нужно исключать из поиска по имени стиля. Никто кроме вас не знает какие должны быть случаи, я лишь показал как отличить нумерованных от маркированных. Рассматривать надо все случаи, также учтите, что таблица тоже считается как параграф и её нужно "отсеивать".
Записан

rami
Гуру
*******
Offline Offline

Пол: Мужской
Сообщений: 3 061


iMac, LibreOffice и Apache OpenOffice


« Ответ #6: 31 Октябрь 2016, 17:01 »

Как можно отключить стили маркерованного и нумерованного списка?
Присвоение пустого стиля нумерации удаляет стиль нумерации:
Код:
p.NumberingStyleName=""
Записан

karpo518
Форумчанин
***
Offline Offline

Сообщений: 51


« Ответ #7: 31 Октябрь 2016, 18:24 »

Цитата:
Код:
p.NumberingStyleName=""
Спасибо. Это то, что нужно!

Подскажите, а как можно определить уровень вложенности элемента списка?

И ещё, как можно показать все стили текста, чтобы увидеть все отличия стилей двух текстовых интервалов? Например, я не знал о существовании свойств NumberingStyleName,NumberingIsNumber,ListLabelString. Я гуглил на русском, на английском, листал книгу Эндрю Питоньяка. И теперь когда услышал это от вас, просто не представляю, как мог бы прийти к этому сам.
Записан

Linux Mint 18 (64 bit),  LibreOffice 5.1.6.2
rami
Гуру
*******
Offline Offline

Пол: Мужской
Сообщений: 3 061


iMac, LibreOffice и Apache OpenOffice


« Ответ #8: 31 Октябрь 2016, 18:44 »

Например, я не знал о существовании свойств NumberingStyleName,NumberingIsNumber,ListLabelString. Я гуглил на русском, на английском, листал книгу Эндрю Питоньяка. И теперь когда услышал это от вас, просто не представляю, как мог бы прийти к этому сам.
Надо было не листать, а читать Смеющийся книгу Эндрю Питоньяка. См. скриншот 306 страницы из Эндрю Питоньяк. OpenOffice.org Объяснение Макросов.
Подскажите, а как можно определить уровень вложенности элемента списка?
Это то, что подчёркнуто на скриншоте?


* Эндрю Питоньяк. OpenOffice.org Объяснение Макросов.png (246.73 Кб, 1051x687 - просмотрено 16 раз.)
Записан

kompilainenn
Мастер
*****
Online Online

Сообщений: 3 176



« Ответ #9: 31 Октябрь 2016, 22:37 »

Надо было не листать, а читать
ты много хочешь, это ж КНИГА
Записан

Поддержать разработчиков LibreOffice можно тут, а наш форум вот тут
karpo518
Форумчанин
***
Offline Offline

Сообщений: 51


« Ответ #10: 1 Ноябрь 2016, 16:15 »

Цитата:
Надо было не листать, а читать Смеющийся книгу Эндрю Питоньяка

Я искал поиском по pdf) Спасибо за помощь.

Надеюсь, последний вопрос. После форматирования выделенной области её границы изменяются. Как вернуть начало выделенной области(левую границу) с середины строки на начало этой же строки? Пробую вот так:
Код:
oVC = thisComponent.getCurrentController.getViewCursor
oVC.gotoStartOfLine(True)

Не получается.
Записан

Linux Mint 18 (64 bit),  LibreOffice 5.1.6.2
rami
Гуру
*******
Offline Offline

Пол: Мужской
Сообщений: 3 061


iMac, LibreOffice и Apache OpenOffice


« Ответ #11: 1 Ноябрь 2016, 17:33 »

Надеюсь, последний вопрос. После форматирования выделенной области её границы изменяются. Как вернуть начало выделенной области(левую границу) с середины строки на начало этой же строки?
В перемещениях курсора True означает "перемещение с выделением от текущего положения до указанного", а False означает "перемещение курсора в указанную позицию" (без выделения). Вам нужно заменить True на False. В результате курсор сместится в начало видимой строки (но это может быть середина предложения или даже середина перенесённого слова). Вам нужен видимый курсор или всё же текстовый Непонимающий Непонимающий Непонимающий
Записан

karpo518
Форумчанин
***
Offline Offline

Сообщений: 51


« Ответ #12: 2 Ноябрь 2016, 10:17 »

Цитата:
В перемещениях курсора True означает "перемещение с выделением от текущего положения до указанного", а False означает "перемещение курсора в указанную позицию" (без выделения). Вам нужно заменить True на False.

Мой код не оказывает никакого влияния на видимый курсор независимо от передаваемого значения (True/False).

Я работаю с текстовым курсором, но после всех манипуляций оказывается, что контент первой выделенной строки оказывается за пределом выделенной области. Видимый курсор находится на конце видимой области. Мне нужно вернуть первую строку в пределы выделенной области. Проще всего было бы запомнить позицию начала выделенной области и подвинуть на неё левую границу выделенной области. Я хотел это сделать с помощью видимого курсора. Прикладываю скрины


* screen01.png (125.22 Кб, 1117x393 - просмотрено 9 раз.)

* screen02.png (135.59 Кб, 1111x390 - просмотрено 10 раз.)
Записан

Linux Mint 18 (64 bit),  LibreOffice 5.1.6.2
Страниц: 1   Вверх
  Печать  
 
Перейти в:  

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