Форум поддержки пользователей. LibreOffice, Apache OpenOffice, OpenOffice.org

Форум поддержки пользователей. LibreOffice, Apache OpenOffice, OpenOffice.org

31 Март 2020, 15:38 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
Новости: Вы можете задать вопрос по LibreOffice или Apache OpenOffice без регистрации, используя форму
 
   Начало   Помощь Поиск Войти Регистрация    задать вопрос  
Страниц: 1   Вниз
  Печать  
Автор Тема: [Решено] Calc: Как построить стандартный фильтр по полю DatabaseRange?  (Прочитано 165 раз)
0 Пользователей и 1 Гость смотрят эту тему.
eeigor
Участник
**
Offline Offline

Сообщений: 45


« Стартовое сообщение: 20 Март 2020, 12:41 »

Прошу помочь с автофильтром в макросе.
Информация, в принципе, есть (в том числе на этом форуме), но не могу уловить нюансы.
Свойства и методы у именованных диапазонов и диапазонов базы данных различны. Создавать и модифицировать фильтр - не одно и то же. Примеры даны применительно к листу, а мне нужно для DatabaseRange (хотя лист - это тоже диапазон Улыбка).
В общем, идут ошибки...
Подскажите, как создать дескриптор, задать значение поля фильтра и наложить фильтр применительно к объекту DatabaseRange?

На примерном наборе данных с именем "Data" (DatabaseRange).
Поле1 Поле2
а         д
б         ж
в         ж
г         д
Как отфильтровать по полю "Поле2" все "д".

Во всяком случае, у меня не получается инициализировать объект FilterFields оператором
oFilterDesc = oDBRange.getFilterDescription()
oFields = oFilterDesc.getFilterFields()
« Последнее редактирование: 21 Март 2020, 12:34 от eeigor » Записан
eeigor
Участник
**
Offline Offline

Сообщений: 45


« Ответ #1: 21 Март 2020, 12:32 »

Наложение фильтра: особенности обычных именованных диапазонов и диапазонов базы данных (БД).
Фильтруем диапазон по столбцу 8 по критерию "Некоторый критерий фильтрации".

   Dim oDoc, oSheet, nEndRow% ' ссылки уже установлены, переменная уже задана
   Dim oRange

REM   DatabaseRange

   oRange = oSheet.getCellRangeByPosition(0, 5, 8, nEndRow)  'некий диапазон
   oDoc.DatabaseRanges.addNewByName("Имя диапазона БД", oRange.RangeAddress)  'диапазон БД создается
   oRange = oDoc.DatabaseRanges.getByName("Имя диапазона БД")
   oRange.AutoFilter = True

   Dim oFilter As Object
   Dim oFields(0) As New com.sun.star.sheet.TableFilterField

   oFilter = oRange.getFilterDescriptor(True)
   With oFields(0)
      .Field = 8
'      .IsNumeric = False  'default
      .StringValue = "Некоторый критерий фильтрации"
      .Operator = com.sun.star.sheet.FilterOperator.EQUAL
   End With

   oFilter.setFilterFields(oFields())
   oRange.refresh()


REM   Обычный именованный диапазон

   oRange = oSheet.getCellRangeByPosition(0, 5, 8, nEndRow)  'некий диапазон
'   oRange = oNewSheet.getCellRangeByName("Имя диапазона БД")  'с диапазоном БД можно работать, как с обычным именованным

   Dim oFilter As Object
   Dim oFields(0) As New com.sun.star.sheet.TableFilterField

   oFilter = oRange.createFilterDescriptor(True)
   With oFields(0)
      .Field = 8
'      .IsNumeric = False
      .StringValue = "Некоторый критерий фильтрации"
      .Operator = com.sun.star.sheet.FilterOperator.EQUAL
   End With

   oFilter.setFilterFields(oFields())
   oFilter.ContainsHeader = True
   oRange.filter(oFilter)

Как-то так...
Записан
Страниц: 1   Вверх
  Печать  
 
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!