Макрос LibreOffice

Автор slbne, 2 апреля 2020, 12:26

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

slbne

Добрый день помогите написать макрос для очистки формата первой
страницы текста документа, выделенного текста двух
последовательно расположенных абзацев.
Заранее спасибо!

economist

#1
Ctrl+M очистит формат выделения.
Ctrl+0 назначит выделению формат Обычный текст
Ctrl+Shift+V вставит любой текст как Обычный    
Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...

kompilainenn

Цитата: economist от  2 апреля 2020, 21:11
Ctrl+M очистит формат выделения.
Ctrl+0 назначит выделению формат Обычный текст
Ctrl+Shift+V вставит любой текст как Обычный   
Ну, а если документов сотни?
Поддержать разработчиков LibreOffice можно тут, а наш форум вот тут

slbne

Цитата: economist от  2 апреля 2020, 21:11
Ctrl+M очистит формат выделения.
Ctrl+0 назначит выделению формат Обычный текст
Ctrl+Shift+V вставит любой текст как Обычный    

Меня интересует именно макрос, вот макрос  сделанный мной через функцию "записать макрос"
"sub forma
rem define variables
dim document   as object
dim dispatcher as object
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
dispatcher.executeDispatch(document, ".uno:ResetAttributes", "", 0, Array())
end sub
"

То есть я выделяю текст жму выполнить макрос и он очищает формат для выделенного мною текста, мне нужно написать макрос для очистки формата именно первой страницы документа.
Я пытаюсь сделать взяв за основу код
"Dim Doc,dispatcher As Object, Enum As Object, TextEl As Object  
doc   = ThisComponent
   Enum = Doc.Text.CreateEnumeration
   While Enum.hasMoreElements
TextElement = Enum.nextElement


If TextElement.supportsService("com.sun.star.text.Paragraph") Then

TextElement.CharColor = RGB(0,0,0)
TextElement.CharFontName = "Free Times"
TextElement.CharUnderline = com.sun.star.awt.FontUnderline.NONE
TextElement.CharHeight = 20
TextElement.CharPosture =com.sun.star.awt.FontSlant.NONE

End If
Wend
msgbox "Конец макроса"
End Sub
"
Тут в данном макросе я вижу что он выделяет параграфы и движется по ним и я могу менять свойства текста, то есть при выполнении данного макроса
Текст принимает цвет,гарнитуру,кегль которую я внесу , не могу понять как сделать общую запись на очистку формата, да и этот макрос будет проверять все записи в документе, то есть если текст в документе более 1 страницы то он и будет проверять более 1 страницы, а мне необходимо остановиться после 1 страницы.

Yakov

А если параграф разбит на две страницы?

slbne

Цитата: Yakov от  3 апреля 2020, 12:38
А если параграф разбит на две страницы?
Согласен , есть ли возможность "проходить" не по параграфам а по страницам?

bigor

#6
Проверьте:
Sub Test1
oViewCursor = ThisComponent.CurrentController.getViewCursor()
oViewCursor.jumpToFirstPage()
oViewCursor.jumpToEndOfPage()
'test=oViewCursor.getPosition()
flag_ = true
while flag_
if not(oViewCursor.goUp(1, true)) then flag_=false
wend
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
dispatcher.executeDispatch(document, ".uno:ResetAttributes", "", 0, Array())
End Sub


Что дальше с этим делать еще не придумал :)
Наверное можно сделать и без диспетчера, но  в пятницу не  до поиска методов :)
Поддержать разработчиков LibreOffice можно можно тут, а наш форум вот тут

slbne

Цитата: Bigor от  3 апреля 2020, 16:41pToEndOfPage()
'test=oViewCursor.getPosition()
flag_ = true
while flag_
 if not(oViewCursor.goUp(1, true)) then flag_=false
wend
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
dispatcher.executeDispatch(document, ".uno:Res

Работает , но не могу определить корректно или нет , можно попросить "объяснить" код для понимания ?

bigor

ЦитироватьoViewCursor = ThisComponent.CurrentController.getViewCursor() 'задаем видимый курсор
oViewCursor.jumpToFirstPage() 'переводим его на 1 страницу
oViewCursor.jumpToEndOfPage() 'переводим его в конец текущей страницы
'test=oViewCursor.getPosition()
flag_ = true
while flag_ 'цикл пока флаг истина
if not(oViewCursor.goUp(1, true)) then flag_=false 'двигаем курсор на 1 строчку вверх с 'выделение текста, и проверяем прошел переход или не, если нет сбрасываем флаг
wend
Дальше код с вашего макроса
Поддержать разработчиков LibreOffice можно можно тут, а наш форум вот тут