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

Следующий макрос демонстрирует обработку текстовых таблиц и содержащихся в них ячеек

Листинг 8.11.1: Создать текстовую таблицу и вставить в нее ячейки

'Author: Hermann Kienlein

'Author: Christian Junker

Sub easyUse( )

Dim odoc, otext, ocursor, mytable, tablecursor

odoc = thisComponent

otext = odoc.getText()

mytable = CreateTable(odoc)

'Создаем нормальный текстовый курсор TextCursor

ocursor = otext.CreateTextCursor()

ocursor.gotoStart(false)

'теперь определен интервал, равный позиции в таблице, давайте вставим его (now that we defined the range = position of the table, let's insert it)

otext.insertTextContent(ocursor, myTable, false )

tablecursor = myTable.createCursorByCellName("A1")

InsertNextItem("first cell", tablecursor, mytable) 'Вставляем новый элемент:

InsertNextItem("second cell", tablecursor, mytable) 'и еще один:

End Sub

Sub InsertNextItem(what, oCursor, oTable)

Dim oCell As Object

'задаем имя интервала ячеек, которые выделены данным курсором

sName = oCursor.getRangeName()

' имя ячейку будет что-то вроде D3

oCelle = oTable.getCellByName(sName)

oCelle.String = what

oCursor.goRight(1,FALSE)

End Sub

Function CreateTable(document) As Object

oTextTable = document.createInstance("com.sun.star.text.TextTable")

oTextTable.initialize(5, 8)

oTextTable.HoriOrient = 0 'com.sun.star.text.HoriOrientation::NONE

oTextTable.LeftMargin = 2000

oTextTable.RightMargin = 1500

CreateTable = oTextTable

End Function

Sub deleteTables()

'Иногда удаление таблиц в GUI кажется видом глупости,

'но все же эта процедура удалит все таблицы

Dim enum, textobject

enum = thisComponent.Text.createEnumeration

While enum.hasMoreElements()

txtcontent = enum.nextElement()

If txtcontent.supportsService("com.sun.star.text.TextTable") Then

thisComponent.Text.removetextcontent(txtcontent)

End If

Wend

End Sub

    1. Таблица без рамок границы (borders)

Lalaimia Samia <samia.lalaimia@infotel.com> спрашивала меня, как вставить таблицу в документ, который не содержит границ (borders). Нельзя обрабатывать границы таблицы до тех пор, пока оне не будет вставлена. Следующая проблема в том, что каждое из свойств является структурой, поэтому невозможно напрямую изменять структуру, потому что фактически Вы работаете с ее копией. Ответом будет скопировать структуру во временную переменную, модифицировать эту переменную, а затем скопировать эту временную переменную обратно. Это скучновато, но просто.

Листинг 8.12.1: Вставить текстовую таблицу без рамок границы.

Sub InsertATableWithNoBorders

Dim oTable 'Новая таблица для вставки

Dim oEnd

REM Пусть документ создаст текстовую таблицу

oTable = ThisComponent.createInstance( "com.sun.star.text.TextTable" )

oTable.initialize(4, 1) 'четыре строки, один столбец

REM Теперь вставляем текстовую таблицу в конец документа

Oend = ThisComponent.Text.getEnd()

ThisComponent.Text.insertTextContent(oEnd, oTable, False)

Dim x 'представляет каждый экземпляр BorderLine

Dim v 'представляет объект рамок границ таблицы TableBorder в целом

v = oTable.TableBorder

x = v.TopLine : x.OuterLineWidth = 0 : v.TopLine = x

x = v.LeftLine : x.OuterLineWidth = 0 : v.LeftLine = x

x = v.RightLine : x.OuterLineWidth = 0 : v.RightLine = x

x = v.TopLine : x.OuterLineWidth = 0 : v.TopLine = x

x = v.VerticalLine : x.OuterLineWidth = 0 : v.VerticalLine = x

x = v.HorizontalLine : x.OuterLineWidth = 0 : v.HorizontalLine = x

x = v.BottomLine : x.OuterLineWidth = 0 : v.BottomLine = x

oTable.TableBorder = v

Dim a()

a() = Array(Array("Files"), Array("One"), Array("Two"), Array("Three"))

oTable.setDataArray(a())

End Sub

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