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

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

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

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

Пол: Мужской
Сообщений: 514



« Ответ #56914: 3 Январь 2021, 16:58 »

День добрый и с Новым годом!
Есть диапазон условий (CriteriaRange) расширенного фильтра (AdvancedFilter) на листе и диапазон базы данных (DatabaseRange), фильтруемый макросом после изменения условий фильтрации. Строка заголовков столбцов данных закреплена. Проблема в том, что после наложения фильтра данные могут отображаться не с начала. А надо, чтобы с начала, с первой строки вновь отфильтрованных данных. Как прокрутить диапазон отфильтрованных данных в начало без изменения активной ячейки в диапазоне условий расширенного фильтра?
Код ниже решает задачу отображения отфильтрованных данных с первой видимой строки (.uno:GoToCell, .uno:GoDown), но теряется активная ячейка (напомню, что пользователь вводит условия в диапазоне условий). Вопрос касается исключительно удобства ввода данных в диапазоне условий.
Код:
Sub EnsureVisible()
   dim document as object
   dim dispatcher as object

   document   = ThisComponent.CurrentController.Frame
   dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

   ' Suppose $A$9 is the upper left corner of the database range.
   dim args1(0) as new com.sun.star.beans.PropertyValue
   args1(0).Name = "ToPoint"
   args1(0).Value = "$A$9"
   dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args1())
  
   dim args2(1) as new com.sun.star.beans.PropertyValue
   args2(0).Name = "By"
   args2(0).Value = 1
   args2(1).Name = "Sel"
   args2(1).Value = false
   dispatcher.executeDispatch(document, ".uno:GoDown", "", 0, args2())
end sub

Можно ли вообще прокрутить диапазон отфильтрованных данных к началу, не мешая работе пользователя, который последовательно вводит условия фильтра в диапазоне условий?
Данные фильтруются по событию листа  "Содержимое изменено" (OnChange Event).
Сейчас, если, к примеру, в результате наложения нового фильтра все видимые в данный момент строки будут скрыты, то можно вообще увидеть только зафиксированную строку заголовков столбцов. И ничего больше. Требуется прокрутить диапазон данных вверх.

Предположим, заголовки столбцов диапазона базы данных начинаются со строки 9.
Повторная фиксация этой строки вызывает прокрутку диапазона данных к началу, хотя и занимает некоторое время. При этом активная ячейка в диапазоне условий не меняется. Возможно, есть другой способ.
ThisComponent.CurrentController.freezeAtPosition (0, 9)  'ByName("A10")
« Последнее редактирование: 4 Январь 2021, 19:39 от eeigor » Записан

Ubuntu 18.04 LTS • LO 7.1.1.2 Community
Страниц: 1   Вверх
  Печать  
 
Перейти в:  

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