Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Руководство_Calc.pdf
Скачиваний:
77
Добавлен:
28.03.2015
Размер:
4.1 Mб
Скачать

 

 

Глава 13Calc как простая база данных

.Field = 0

'

Фильтр по Столбцу A.

.IsNumeric = False

'

Использовать строку, а не число.

.StringValue = "b.*"

'

Все начинающееся с b.

.Operator = com.sun.star.sheet.FilterOperator.EQUAL

End With

требует оба условия и

REM Зададим поле, которая

REM новое условие, которое требует значение,

REM большее или равное 70.

 

With oFields(1)

 

 

.Connection = com.sun.star.sheet.FilterConnection.AND

.Field = 5

'

Фильтр по столбцу F.

.IsNumeric = True

'

Использовать числовое сравнение

.NumericValue = 70

'

Значение больше чем 70

.Operator = com.sun.star.sheet.FilterOperator.GREATER_EQUAL End With

oFilterDesc.setFilterFields(oFields()) oFilterDesc.ContainsHeader = False oFilterDesc.UseRegularExpressions = True oSheet.filter(oFilterDesc)

End Sub

Расширенный фильтр

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

1)Выберите свободное пространство в документе Calc. Пустое пространство может находиться на любом листе в любом месте документа Calc.

2)Продублируйте заголовки столбцов из области для применения фильтра в область, где будут находиться критерии фильтра.

3)Введите критерии фильтра под заголовками колонок (см. Таблицу 10). Критерия в каждой ячейке строки связываются между собой по И (AND). Критерии из разных строк связываются между собой по ИЛИ (OR).

Таблица 8. Пример критериев расширенного фильтра

Имя

Тест

Тест

Экзамен

Экзамен

Средне

Оценк

 

1

2

1

2

е

а

="Andy"

 

>80

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

<80

 

 

 

 

 

 

 

 

СОВЕТ Определите именованные диапазоны для ссылки на Ваши критерии расширенного фильтра и любые выходные диапазоны для отфильтрованных данных (см. Рис. 160). Каждый сформированный именованный диапазон, соответственно, доступен в выпадающем списке в диалоговом окне Расширенный фильтр (см. Рис. 167).

Руководство по Calc

161

Глава 13Calc как простая база данных

После создания одного или нескольких наборов критериев фильтра, примените расширенный фильтр следующим образом:

1)Выберите диапазоны листа которые содержат данные для фильтра.

2)Используйте Данные > Фильтр > Расширенный фильтр для открытия диалогового окна Расширенный фильтр (см. Рис. 167).

3)Выберите диапазон, содержащий критерии фильтра и любые другие уместные параметры.

4)Нажмите OK.

Рис. 167. Применение расширенного фильтра с использованием предварительно определенного именованного диапазона.

Применение расширенного фильтра с использованием макроса просто (см. Листинг 8). Диапазон ячеек, содержащий критерии фильтра используется для создания описателя фильтра, который используется для фильтрации диапазона, содержащего данные.

Листинг 8. Использование расширенного фильтра.

Sub UseAnAdvancedFilter()

Dim oSheet

'Лист из документа Calc.

Dim oRanges

'Свойство NamedRanges.

Dim oCritRange

'Диапазон, содержащий критерии фильтра.

Dim oDataRange

'Диапазон, содержащий данные для фильтрации.

Dim oFiltDesc

'Описатель фильтра.

REM Диапазон,

содержащий критерии фильтра

oSheet = ThisComponent.getSheets().getByIndex(1) oCritRange = oSheet.getCellRangeByName("A1:G3")

REM Вы можете также получить диапазон, содержащий

REM критерии фильтра из именованного диапазона.

REM oRanges = ThisComponent.NamedRanges

REM oRange = oRanges.getByName("AverageLess80")

REM oCritRange = oRange.getReferredCells()

REM Данные, к которым я хочу применить фильтр oSheet = ThisComponent.getSheets().getByIndex(0) oDataRange = oSheet.getCellRangeByName("A1:G16")

oFiltDesc = oCritRange.createFilterDescriptorByObject(oDataRange)

162

Руководство по Calc

Глава 13Calc как простая база данных

oDataRange.filter(oFiltDesc) End Sub

Измените свойство в описателе фильтра для изменения поведения фильтра (см. Таблицу 5).

Фильтр, созданный в Листинге 8, оставляет данные на своем месте. Измените свойство OutputPosition для задания различного положения результата (см. Листинг 9). Описатель фильтра должен быть изменен прежде, чем применен фильтр.

Таблица 9. Свойства расширенного фильтра.

Свойство

Комментарий

 

ContainsHeader

Boolean, определяет, содержит ли первая строка

(или столбец)

 

заголовки, которые не должны фильтроваться.

 

CopyOutputData

Boolean, определяет, должны ли отфильтрованные данные ко-

 

пироваться в другое место в документе.

 

IsCaseSensitive

Boolean, определяет, требуется ли учитывать регистр при срав-

 

нении записей.

 

Orientation

Определяет, что фильтрация осуществляется по столбцам

 

(com.sun.star.table.TableOrientation.COLUMNS)

или строкам

 

(com.sun.star.table.TableOrientation.ROWS).

 

OutputPosition

Если CopyOutputData = True , определяет положение куда

 

должны быть скопированы отфильтрованные данные.

SaveOutputPosition

Boolean, определяет, сохраняется ли положение

OutputPosition

 

для будущих запросов.

 

SkipDuplicates

Boolean, определяет, удаляются ли дублирующиеся записи из

 

результата.

 

UseRegularExpressions

Boolean, определяет, интерпретируются ли строки фильтра как

 

регулярные выражения.

 

Листинг 9. Копирование результатов фильтрации в другое место.

REM Копирование результата фильтрации данных в указанное место oFiltDesc.CopyOutputData = True

REM Создайте CellAddress и установите для него Лист3, REM Столбец B, Строка 4 (помните, счет начинается с 0) Dim x As New com.sun.star.table.CellAddress

x.Sheet = 2 x.Column = 1 x.Row = 3

oFiltDesc.OutputPosition = x

(Внимание, дополнительный материал.) Свойство OutputPosition возвращает копию структуры. Поскольку возвращается копия, не возможно непосредственно установить отдельные значения. Например, oFiltDesc.OutputPosition.Row = 2 не работает (потому что Вы устанавливаете Row в копии равной 2, но не изменяете оригинал).

Руководство по Calc

163