Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
94
Добавлен:
11.05.2015
Размер:
616.76 Кб
Скачать
    1. Перебор параграфов (поведение текстового курсора)

Во внутреннем представлении авбзац представлен как “что-то<cr><lf>”. Использование GUI для ручного выделения параграфа выделяет текст без завершающих символов перевода строки (carriage return) и без возврата строки (line feed).

Листинг 7.16.1: Передвинуть курсор на ноль позиций для очистки выделения.

oVCurs = ThisComponent.getCurrentController().getViewCursor()

MsgBox "(" & oVCurs.getString() & ")"

oVCurs.goRight(0, False)

Передвижение курсора на ноль позиций направо очищает выделение и оставляет курсор непосредственно перед символами <cr><lf>; и поэтому не может использоваться для перехода к следующему параграфу. Тем не менее, передвигаться между параграфами можно.

Листинг 7.16.2: Выделить следующий параграф целиком.

Dim oVCurs

Dim oTCurs

oVCurs = ThisComponent.getCurrentController().getViewCursor()

oTCurs = oVCurs.getText().createTextCursorByRange(oVCurs)

oTCurs.gotoNextParagraph(False) 'перейти к началу следующего параграфа.

oTCurs.gotoEndOfParagraph(True) 'выделить параграф целиком.

MsgBox "(" & oTCurs.getString() & ")"

TIP

Совет

Метод gotoEndOfParagraph не включает в выделение разделяющие символы <cr><lf>

Следующий макрос демонстрирует способ перебрать каждый параграф и напечатать имя стиля параграфа. Если выделено больше одного параграфа, то нельзя получить стиль параграфа. Что удобно, этот способ полностью пропускает вставленные текстовые таблицы.

Листинг 7.16.3:Напечатать все стили параграфов.

Sub PrintAllStyles

Dim s As String

Dim oCurs as Variant

Dim sCurStyle As String

oCurs = ThisComponent.Text.CreateTextCursor()

oCurs.GoToStart(False)

Do

If NOT oCurs.gotoEndOfParagraph(True) Then Exit Do

sCurStyle = oCurs.ParaStyleName

s = s & """" & sCurStyle & """" & CHR$(10)

Loop Until NOT oCurs.gotoNextParagraph(False)

MsgBox s, 0, "Styles in Document"

End Sub

      1. Форматирование параграфов с макросами (пример)

Я написал макрос, проверяющий документ и устанавливающий для каждой части с кодами макросов заданный стиль параграфа.

Table 9. Стили параграфа, использованные для форматирования кода макросов.

Описание

Первоначальный стиль

Новый стиль

Макрос из одной строки

_code_one_line

_OooComputerCodeLastLine

Первая строка

_code_first_line

_OooComputerCode

Последняя строка

_code_last_line

_OooComputerCodeLastLine

Строки посередине

_code

_OooComputerCode

Я хотел просмотреть весь документ, определить части с кодами макросов (основываясь на стиле параграфа) и присвоить им нужный нужный новый стиль параграфа.

Листинг 7.16.1.1:Форматировать параграфы с макросами.

Sub user_CleanUpCodeSections

worker_CleanUpCodeSections("_code_first_line", "_code", _

"_code_last_line", "_code_one_line")

End Sub

Sub worker_CleanUpCodeSections(firstStyle$, midStyle$, _

lastStyle$, onlyStyle$)

Dim vCurCurs as Variant 'Текущций курсор

Dim vPrevCurs as Variant 'Предыдущий курсор, на один авбзац раньше

Dim sPrevStyle As String 'Предыдущий стиль

Dim sCurStyle As String 'Текущий стиль

REM Позиция текущего курсора в начале второго параграфа

vCurCurs = ThisComponent.Text.CreateTextCursor()

vCurCurs.GoToStart(False)

If NOT vCurCurs.gotoNextParagraph(False) Then Exit Sub

REM Позиция предыдущего курсора для выделения первого параграфа

vPrevCurs = ThisComponent.Text.CreateTextCursor()

vPrevCurs.GoToStart(False)

If NOT vPrevCurs.gotoEndOfParagraph(True) Then Exit Sub

sPrevStyle = vPrevCurs.ParaStyleName

Do

If NOT vCurCurs.gotoEndOfParagraph(True) Then Exit Do

sCurStyle = vCurCurs.ParaStyleName

REM Здесь выполняется основная работа

If sCurStyle = firstStyle$ Then

REM Текущий стиль равен первому стилю

REM Проверяем, равен ли предыдущий стиль одному из следующих!

Select Case sPrevStyle

Case onlyStyle$, lastStyle$

sCurStyle = midStyle$

vCurCurs.ParaStyleName = sCurStyle

vPrevCurs.ParaStyleName = firstStyle$

Case firstStyle$, midStyle$

sCurStyle = midStyle$

vCurCurs.ParaStyleName = sCurStyle

End Select

ElseIf sCurStyle = midStyle$ Then

REM Текущий стиль равен стилю середины макроса

REM Проверка, равен ли предыдущий стиль одному из следующих!

Select Case sPrevStyle

Case firstStyle$, midStyle$

REM do nothing!

Case onlyStyle$

REM Стиль конца макроса был единственным стилем, но он предшествует стилю середины макроса!

vPrevCurs.ParaStyleName = firstStyle$

Case lastStyle$

vPrevCurs.ParaStyleName = midStyle$

Case Else

sCurStyle = firstStyle$

vCurCurs.ParaStyleName = sCurStyle

End Select

ElseIf sCurStyle = lastStyle$ Then

Select Case sPrevStyle

Case firstStyle$, midStyle$

REM Ничего не делать!

Case onlyStyle$

REM Стиль конца макроса был единственным стилем, но он предшествует стилю середины макроса!

vPrevCurs.ParaStyleName = firstStyle$

Case lastStyle$

vPrevCurs.ParaStyleName = midStyle$

Case Else

sCurStyle = firstStyle$

vCurCurs.ParaStyleName = sCurStyle

End Select

ElseIf sCurStyle = onlyStyle$ Then

Select Case sPrevStyle

Case firstStyle$, midStyle$

sCurStyle = midStyle$

vCurCurs.ParaStyleName = sCurStyle

Case lastStyle$

sCurStyle = lastStyle$

vCurCurs.ParaStyleName = sCurStyle

vPrevCurs.ParaStyleName = midStyle$

Case onlyStyle$

sCurStyle = lastStyle$

vCurCurs.ParaStyleName = sCurStyle

vPrevCurs.ParaStyleName = firstStyle$

End Select

Else

Select Case sPrevStyle

Case firstStyle$

vPrevCurs.ParaStyleName = onlyStyle$

Case midStyle$

vPrevCurs.ParaStyleName = lastStyle$

End Select

End If

REM Работа выполнена, передвигаем курсор предыдущего параграфа

vPrevCurs.gotoNextParagraph(False)

vPrevCurs.gotoEndOfParagraph(True)

sPrevStyle = vPrevCurs.ParaStyleName

Loop Until NOT vCurCurs.gotoNextParagraph(False)

End Sub

Макрос 7.16.1.1 легко переделать для форматирования и макрос станет много меньше. У меня нехватило на это времени.

Соседние файлы в папке ooo