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

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

25 Июнь 2019, 23:35 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
Новости: Вы можете задать вопрос по LibreOffice или Apache OpenOffice  без регистрации, используя форму
 
   Начало   Помощь Поиск Войти Регистрация    задать вопрос  
Страниц: 1 2 »   Вниз
  Печать  
Автор Тема: Автоматическое скрытие строк по событию (изменение данных) и оптим. высота строк  (Прочитано 1310 раз)
0 Пользователей и 1 Гость смотрят эту тему.
vovan_d
Участник
**
Offline Offline

Пол: Мужской
Расположение: Беларусь
Сообщений: 46


« Стартовое сообщение: 10 Апрель 2019, 09:30 »

Добрый день!

     Помогите создать макрос или другой способ,
     необходимо чтобы автоматический скрывались строки у которых отсуствует количество (равно 0),
     также оптимальная высота строки корректно работала (по умолчанию не работает).

     Примечание: данные вводятся на другом листе, это просто готовый бланк для печати.

     (Система Manjaro, Libreoffice 6.2)


* Calc_TN.png (44.46 Кб, 1085x501 - просмотрено 10 раз.)
« Последнее редактирование: 10 Апрель 2019, 09:33 от vovan_d » Записан
Bigor
Опытный пользователь
***
Offline Offline

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


« Ответ #1: 10 Апрель 2019, 09:41 »

Посмотрите здесь про скрытие строк
Записан
vovan_d
Участник
**
Offline Offline

Пол: Мужской
Расположение: Беларусь
Сообщений: 46


« Ответ #2: 10 Апрель 2019, 09:45 »


Я смотрел, вчера. Не совсем разобралься. Если не сложно, описать данный макрос и я как понимаю он не совсем автоматический работает, нужно постоянно выполнять макрос или я ошибаюсь?
Записан
Bigor
Опытный пользователь
***
Offline Offline

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


« Ответ #3: 10 Апрель 2019, 09:54 »

все макросы нужно выполнять Улыбка можно один раз перед печатью или совместить скрытие с печатью.

Код:
Dim oSheet As Variant, oEmpty As Variant, oRows As Variant, i As Long '- задаем перемнные
oSheet = ThisComponent.getCurrentSelection().getSpreadsheet() '-лист на котором будем работать
oSheet.getRows().IsVisible = True ' - ltделаем е строки на листе видимыми
oEmpty = oSheet.getColumns.getByIndex(9).queryEmptyCells() '-собираем все строки у которых в столбце J пусто
For i = oEmpty.getCount()-1 To 0 Step -1 '-цикл по собранным строкам
oEmpty.getByIndex(i).getRows().IsVisible = False '-делаем их скрытыми
Next i
End Sub ' - все :)
Записан
vovan_d
Участник
**
Offline Offline

Пол: Мужской
Расположение: Беларусь
Сообщений: 46


« Ответ #4: 10 Апрель 2019, 11:50 »

все макросы нужно выполнять Улыбка можно один раз перед печатью или совместить скрытие с печатью.

Код:
Dim oSheet As Variant, oEmpty As Variant, oRows As Variant, i As Long '- задаем перемнные
oSheet = ThisComponent.getCurrentSelection().getSpreadsheet() '-лист на котором будем работать
oSheet.getRows().IsVisible = True ' - ltделаем е строки на листе видимыми
oEmpty = oSheet.getColumns.getByIndex(9).queryEmptyCells() '-собираем все строки у которых в столбце J пусто
For i = oEmpty.getCount()-1 To 0 Step -1 '-цикл по собранным строкам
oEmpty.getByIndex(i).getRows().IsVisible = False '-делаем их скрытыми
Next i
End Sub ' - все :)
все макросы нужно выполнять Улыбка можно один раз перед печатью или совместить скрытие с печатью.

Код:
Dim oSheet As Variant, oEmpty As Variant, oRows As Variant, i As Long '- задаем перемнные
oSheet = ThisComponent.getCurrentSelection().getSpreadsheet() '-лист на котором будем работать
oSheet.getRows().IsVisible = True ' - ltделаем е строки на листе видимыми
oEmpty = oSheet.getColumns.getByIndex(9).queryEmptyCells() '-собираем все строки у которых в столбце J пусто
For i = oEmpty.getCount()-1 To 0 Step -1 '-цикл по собранным строкам
oEmpty.getByIndex(i).getRows().IsVisible = False '-делаем их скрытыми
Next i
End Sub ' - все :)
« Последнее редактирование: 10 Апрель 2019, 11:57 от vovan_d » Записан
vovan_d
Участник
**
Offline Offline

Пол: Мужской
Расположение: Беларусь
Сообщений: 46


« Ответ #5: 10 Апрель 2019, 11:57 »

Пробую этот вариант, есть одно но, в ячейках прописаны формулы и строки остаються тоже, хотя значение на другом листе "0". Как сделать чтобы фильтр работал по конечному значению?
Записан
vovan_d
Участник
**
Offline Offline

Пол: Мужской
Расположение: Беларусь
Сообщений: 46


« Ответ #6: 11 Апрель 2019, 07:31 »

Жду руку помощи. Уже пробовал сам писать макросы через запись, ничего не получается.
Когда выполняешь операции во время записи макроса, все выполняется, как только создал макрос, все, ничего не работает.

Вот такой макрос создаеться:

REM  *****  BASIC  *****

Sub Main

End Sub



sub Opt_str
rem ----------------------------------------------------------------------
rem define variables
dim document   as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:ShowRow", "", 0, Array())

rem ----------------------------------------------------------------------
dim args2(0) as new com.sun.star.beans.PropertyValue
args2(0).Name = "aExtraHeight"
args2(0).Value = 0

dispatcher.executeDispatch(document, ".uno:SetOptimalRowHeight", "", 0, args2())


end sub


sub Opt_tn
rem ----------------------------------------------------------------------
rem define variables
dim document   as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

rem ----------------------------------------------------------------------
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "ToPoint"
args1(0).Value = "$B$24:$BO$80"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args1())

rem ----------------------------------------------------------------------
rem dispatcher.executeDispatch(document, ".uno:DataFilterStandardFilter", "", 0, Array())

rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:FilterExecute", "", 0, Array())


end sub
« Последнее редактирование: 11 Апрель 2019, 08:04 от vovan_d » Записан
Bigor
Опытный пользователь
***
Offline Offline

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


« Ответ #7: 11 Апрель 2019, 09:15 »

В том макросе, на который я ссылку дал, скрываются строки с  пустыми ячейками. У тебя с нулями, значит он их не обрабатывает. Посмотри в той же теме выше есть еще 2 макроса - мой и economist-а. Они скрывают строки со значениями меньше 1.
Записан
vovan_d
Участник
**
Offline Offline

Пол: Мужской
Расположение: Беларусь
Сообщений: 46


« Ответ #8: 11 Апрель 2019, 09:52 »

Sub test_filtr1
oSheet = ThisComponent.sheets(0)
oSheet.getRows().IsVisible = True
For i = 25 To  79 'строки как в твоем примере
   If    oSheet.getCellByPosition(24,i).value > 0 Then
      oSheet.getCellByPosition(24,i).getRows().IsVisible = False
   EndIf
Next
End Sub

Посмотрите что я делаю не так
"24" - я как понимаю порядковый номер столбца (Y), правда он объединенный (Y, Z, AA)?
"25-79" - это порядковые номера строк на которых необходимо отработать макрос?
Записан
Bigor
Опытный пользователь
***
Offline Offline

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


« Ответ #9: 11 Апрель 2019, 10:11 »

ну про объединенные ячейки не было ничего в первоначальном условии Улыбка С ними не пробовал, и смогу посмотреть только после 15:00 сегодня
Записан
vovan_d
Участник
**
Offline Offline

Пол: Мужской
Расположение: Беларусь
Сообщений: 46


« Ответ #10: 11 Апрель 2019, 10:21 »

Пробовал и необъединонные ячейки, все равно не работает
Записан
Bigor
Опытный пользователь
***
Offline Offline

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


« Ответ #11: 11 Апрель 2019, 10:39 »

выложите свой файл, что бы было на чем пробовать
Записан
vovan_d
Участник
**
Offline Offline

Пол: Мужской
Расположение: Беларусь
Сообщений: 46


« Ответ #12: 11 Апрель 2019, 13:26 »

Вот так более менее работает:
 
Sub test_filtr1
Dim oSheet As Variant, oEmpty As Variant, oRows As Variant, i As Long '- задаем перемнные
       oSheet = ThisComponent.getCurrentSelection().getSpreadsheet() '-лист на котором будем работать
       oSheet.getRows().IsVisible = True ' - делаем е строки на листе видимыми
       oSheet = ThisComponent.sheets(1) ' - текущая страница
    For i = 24 To  78 ' - какие строки обработать
   If    oSheet.getCellByPosition(24,i).value = 0 Then ' - какие ячейки обрабатывать, в моем случае "Y"
      oSheet.getCellByPosition(24,i).getRows().IsVisible = False ' - скрыть строки которые соответсвуют значению строки выше
   EndIf
Next

End Sub

теперь мне нужно строки 25-78 автоматически оптимальная высота.

и еще, проблема, настроил данный макрос в Manjaro, открываю файл Win7 - Libreoffice, макрос не работает
« Последнее редактирование: 11 Апрель 2019, 14:36 от vovan_d » Записан
Bigor
Опытный пользователь
***
Offline Offline

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


« Ответ #13: 11 Апрель 2019, 15:09 »

Еще один цикл добавьте
Код:

For i =25 to 78
ThisComponent.Sheets(1).getCellbyPosition(24,i).getRows().OptimalHeight=true '-оптимальная высота
Next i

только кажется мне, что он оптимизирует и скрытые строки
Записан
Bigor
Опытный пользователь
***
Offline Offline

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


« Ответ #14: 11 Апрель 2019, 15:45 »

настроил данный макрос в Manjaro, открываю файл Win7 - Libreoffice, макрос не работает
а где макрос сохранили, и что за файл  Win7 - Libreoffice ods/xls ?
Записан
Страниц: 1 2 »   Вверх
  Печать  
 
Перейти в:  

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