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

Хотя документ OOo Calc сохраняет адреса URL в текстовом поле URL, как говорится в другом месте этой статьи,а документ OOo Writer идентифицирует содержащиеся в нем адреса URL на основе свойств символа. Ссылка становится ссылкой, когда установлено свойство HyperLinkURL

Sub InsertURLAtTextCursor

Dim oText 'Текстовый объект для текущего объекта

Dim oVCursor 'Текущий видимый курсор

oVCursor = ThisComponent.getCurrentController().getViewCursor()

oText = oVCursor.getText()

oText.insertString(oVCursor, "andrew@pitonyak.org", True)

oVCursor.HyperLinkTarget = "mailto:andrew@pitonyakorg"

oVCursor.HyperLinkURL = "andrew@pitonyak.org"

' oVCursor.HyperLinkName = "andrew@pitonyak.org"

' oVCursor.UnvisitedCharStyleName = "Internet Link"

' oVCursor.VisitedCharStyleName = "Visited Internet Link"

End Sub

    1. Сортировка текста

Текстовый курсор можно использовать дя сортировки данных в документе OOo Writer.

Sub SortTextInWrite

Dim oText 'Текстовый объект для текущего объекта

Dim oVCursor 'Текущий видимый курсор

Dim oCursor 'Текстовый курсор

Dim oSort

Dim i%

Dim s$

REM Предположим, что нужно сортировать выделенный (selected) текст!

REM К несчастью, видимый курсор НЕ может создать дескриптор сортировки

REM Создаем новый текстовый курсор, который может создать дескриптор сортировки

oVCursor = ThisComponent.getCurrentController().getViewCursor()

oText = oVCursor.getText()

oCursor = oText.createTextCursorByRange(oVCursor)

oSort = oCursor.createSortDescriptor()

' On Error Resume Next

' For i = LBound(oSort) To UBound(oSort)

' s = s & "(" & oSort(i).Name & ", "

' s = s & oSort(i).Value

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

' Next

' MsgBox s, 0, "Условия сортировки"

oCursor.sort(oSort)

End Sub

Используйте SortDescriptor2, применять SortDescriptor не рекомендуется. См. подробнее: http://api.openoffice.org/docs/common/ref/com/sun/star/text/TextSortDescriptor2.htmlhttp://api.openoffice.org/docs/common/ref/com/sun/star/table/TableSortDescriptor2.html

Значения по умолчанию для дескриптора сортировки (sort descriptor), похоже, следующие: (IsSortInTable, False), (Delimiter, 32), (IsSortColumns, True), (MaxSortFieldsCount, 3), (SortFields, ). Для установки порядка сортировки и языка (локали, Locale) нужно изменить параметр SortFields.

    1. Нумерация структур (Outline)

Меня несколько раз спрашивали, как изменить правило, какие стили используются для нумерации структур (outline numbering). Сначала для нумерации структур нужно иметь стиль параграфа. Макрос в 7.21.1 создает новый стиль параграфа с указанием высоты символа. Родительским стилем указывается “Heading”. Можете изменить стиль параграфа для Ваших нужд.

Листинг 7.21.1:Создать новый пальзовательский стиль параграфа.

Function CreateParaStyle(oDoc, NewParaStyle, nCharHeight%)

Dim pFamilies, pStyle, pParaStyles

pFamilies = oDoc.StyleFamilies

pParaStyles = pFamilies.getByName("ParagraphStyles")

If Not pParaStyles.hasByName(NewParaStyle) then

pStyle = oDoc.createInstance("com.sun.star.style.ParagraphStyle")

pStyle.setParentStyle("Heading")

pStyle.CharHeight = nCharHeight

pParaStyles.insertByName(NewParaStyle, pStyle)

End if

End Function

После создания нового пользовательского стиля параграфа или по меньшей мере выбора стилей параграфа для использования можно установить нумерацию. Макрос в 7.21.2 принимает массив имен стилей параграфа и устанавливает нумерацию структур для использования этих стилей.

Информация о нумерации структур хранится в объекте правил нумерации разделов. Получить каждое правило можно используя getByIndex(), который возвращает массив свойств. Просмотрите имя каждого свойства, чтобы найти то свойство, которое нужно изменить. Каждое свойство копируется ИЗ этого массива. Если эти свойства хранились как сервис UNO, а не структура UNO, то будет скопирована ссылка из этого массива, а не копия (я объясняю копирование по значению, а не копирование по ссылке в моей книге). После обнаружения и изменения значений нужных свойств это правило копируется обратно в объект правил.

Листинг 7.21.2:Установить нумерацию структур.

Sub SetNumbering(sNames())

Dim i%, j%

Dim oRules

Dim oRule()

Dim oProp

oRules = ThisComponent.getChapterNumberingRules()

For i = 0 To UBound(sNames())

If i >= oRules.getCount() Then Exit Sub

oRule() = oRules.getByIndex(i)

REM Я не устанавливаю следующее:

REM Adjust, StartWith, LeftMargin,

REM SymbolTextDistance, FirstLineOffset

For j = LBound(oRule()) To Ubound(oRule())

REM oProp - это только копия свойства.

REM Нужно присвоить значение свойства обратно в массив.

oProp = oRule(j)

Select Case oProp.Name

Case "HeadingStyleName"

oProp.Value = sNames(i)

Case "NumberingType"

oProp.Value = com.sun.star.style.NumberingType.ARABIC

Case "ParentNumbering"

oProp.Value = i + 1

Case "Prefix"

oProp.Value = ""

Case "Suffix"

oProp.Value = " "

'Case "CharStyleName"

' oProp.Value =

End Select

oRule(j) = oProp

Next

oRules.replaceByIndex(i, oRule())

Next

End Sub

Если массив, переданный макросу в 7.21.2 , содержит три элемента, то только первые три элемента в структуре модифицируются. Используйте этот макрос как отправную точку. 7.21.3 показывает, как использовать вместе 7.21.1 и 7.21.2.

Листинг 7.21.3:Установить и использовать нумерацию структур

Sub SetOutlineNumbering

CreateParaStyle(ThisComponent, "_New_Heading_1", 16)

CreateParaStyle(ThisComponent, "_New_Heading_2", 14)

setNumbering(Array("_New_Heading_1", "_New_Heading_2"))

End Sub

    1. Вставить оглавление (table of contents =TOC) или другой индекс.

Следующий макрос вставляет оглавление(table of contents TOC) в документ. Если TOC уже существует, тогда вызвается метод обновления (update) существующего индекса. Используйте метод dispose для удаления существующего индекса из документа.

Sub InsertATOC

REM Автор: Andrew Pitonyak

Dim oCurs 'Используется для вставки текстового содержимого.

Dim oIndexes 'Все существующие индексы

Dim oIndex 'Оглавление TOC , если существует, лии новое оглавление, если не было

Dim i As Integer 'Найти существующее оглавление TOC

Dim bIndexFound As Boolean 'Флаг (признак) для указания, что TOC уже найдено

Dim s$

REM Сначала находим TOC , если оно существует. В этом случае,

REM оно будет просто обновлено (updated).

oIndexes = ThisComponent.getDocumentIndexes()

bIndexFound = False

For i = 0 To oIndexes.getCount() - 1

oIndex = oIndexes.getByIndex(i)

If oIndex.supportsService("com.sun.star.text.ContentIndex") Then

bIndexFound = True

Exit For

End If

Next

If Not bIndexFound Then

Print "Не найден существующий индекс"

REM Возможно, нужно создать и вставить новое оглавление!

REM Заметьте, что оглавление ДОЛЖНО создаваться в документе, который

REM содержит это оглавление.

S = "com.sun.star.text.ContentIndex"

oIndex = ThisComponent.createInstance(s)

REM На моем компьютере заданы значения по умолчанию

REM Как Вы хотите создавать этот индекс?

REM CreateFromChapter = False

REM CreateFromLevelParagraphStyles = False

REM CreateFromMarks = True

REM CreateFromOutline = False

oIndex.CreateFromOutline = True

REM Вы можете установить все разновидности других вещей, таких как

REM Title (заголовок) или Level (уровень)

oCurs = ThisComponent.getText().createTextCursor()

oCurs.gotoStart(False)

ThisComponent.getText().insertTextContent(oCurs, oIndex, False)

End If

REM Даже вновь созданный индекс еще не обновлен до ЭТОГО оператора!

oIndex.update()

End Sub

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