Показ отдельной части таблицы по нажатию кнопки

Автор XaKaC54, 9 февраля 2019, 22:15

0 Пользователи и 1 гость просматривают эту тему.

XaKaC54

Уважаемые форумчане! разобравшись с первым вопросом по диалоговому окну (спасибо JohnSUN и rami) у меня назрел вопрос следующего характера:
В появляющемся диалоговом окне есть набор кнопок, при нажатии на которые из таблицы файла должны остаться лишь те строки которые я хочу для них оставить, дабы пользователи которым отведено видели то что они должны видеть, а не всю структуру файла.
     Какое решение пока на данный момент я для себя нагуглил: ставлю макрос на запись, выбираю ненужные строки(те которые не должны отображаться по нажатию кнопки и диалогового окна) после этого выбираю данные-строки-скрыть. Быть может есть какой то более грамотный способ решения данной задачи.

P.S. К сожалению не могу приложить файл для примера из своего проекта непосредственно, ибо он содержит конфиденциальные данные, но думаю суть ясна.(если такая манера неприемлема готов удалить ненужные данные из таблица, оставить ее структуру и прикрепить)

JohnSUN

Да ладно, авось, и так разберёмся - вопрос-то, вроде, не сложный. (Только слов непонятных много  ;D)

По мере изменения данных в диалоге - меняются критерии отображения данных на листе, над которым этот диалог висит, да?
Хочется отфильтровать строки, которые нужны для текущего состояния диалога, да? Часть колонок тоже нужно скрыть-показать?
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

XaKaC54

Цитата: JohnSUN от  9 февраля 2019, 22:21
Да ладно, авось, и так разберёмся - вопрос-то, вроде, не сложный. (Только слов непонятных много  ;D)

По мере изменения данных в диалоге - меняются критерии отображения данных на листе, над которым этот диалог висит, да?
Хочется отфильтровать строки, которые нужны для текущего состояния диалога, да? Часть колонок тоже нужно скрыть-показать?

Смотрите история такая, пользователь открывает файл, ему выпадает сразу диалоговое окно где по кнопкам расписано название отделов, он выбирает свой отдел. И вот я хочу чтобы после того как он нажал кнопку из общей таблицы остались только те строки которые относятся к его отделу. Сложность заключается в том что отделы раскиданы по всему документу в некоторых конкретных случаях но в либре просто отличный инструмент выделения и вроде как все получается. по поводу столбцов, нет отдельные столбцы не нужны, все завязано именно на строках.


JohnSUN

Ну, если строки отделов остаются на своих позициях, таблица не сортируется, то можно использовать такой вариант
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

JohnSUN

Или название отдела живьём присутствует в какой-то колонке? Тогда вместо Tag можно использовать прямо надпись на кнопке и устанавливать фильтр... Это вроде как по-аккуратнее будет
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

rami

Цитата: XaKaC54 от  9 февраля 2019, 22:15Какое решение пока на данный момент я для себя нагуглил: ставлю макрос на запись, выбираю ненужные строки(те которые не должны отображаться по нажатию кнопки и диалогового окна) после этого выбираю данные-строки-скрыть. Быть может есть какой то более грамотный способ решения данной задачи.
Если цель скрытия — удобство просмотра избранных данных, то подойдёт, если цель — не допуск к секретным данным, то лучше закрыть глаза ладошками.

JohnSUN

Цитата: rami от  9 февраля 2019, 23:18
если цель — не допуск к секретным данным, то лучше закрыть глаза ладошками.
Ага, или гвоздиком поковырять... Нет, смотри как описано - в форме есть кнопки для каждого отдела. То есть, любой, кто открыл файл может посмотреть любую часть. Просто данных там до фига, всю простыню листать в поисках своих строк - долго и скучно. Так что, мне кажется, речь именно об удобстве.
А если эта таблица что-то вроде бюджета организации, то действительно строки разных отделов вразнобой попадаются в разных разделах. И фильтр "в лоб" к ним не всегда применишь (почему-то финансисты пишут статьи доходов-расходов, но не всегда пишут на ком цифра висит)
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

XaKaC54

Цитата: rami от  9 февраля 2019, 23:18
Цитата: XaKaC54 от  9 февраля 2019, 22:15Какое решение пока на данный момент я для себя нагуглил: ставлю макрос на запись, выбираю ненужные строки(те которые не должны отображаться по нажатию кнопки и диалогового окна) после этого выбираю данные-строки-скрыть. Быть может есть какой то более грамотный способ решения данной задачи.
Если цель скрытия — удобство просмотра избранных данных, то подойдёт, если цель — не допуск к секретным данным, то лучше закрыть глаза ладошками.

Все правильно это для удобства работы, они не будут самостоятельно искать пути для отображения всех строк, тут как раз дело в том чтобы при запуске файла они выбрали свой отдел, внесли изменения касательно него в одном столбце и вышли из файла сохранив его. Отлично подходит то что вы написали! единственное после нажатия кнопки и отображения нужных строк почему диалоговое окно не закрывается? какой параметр надо добавить?

И еще один вопросик, при запуски либры он выдает сообщение что использовать макросы не будет, ибо запрещено высоким уровнем безопасности, я поставил средний и после этого он начал спрашивать разрешение на использовании. меня вполне устраивает что он спрашивает, но категорически нет что он не дает сделать этого без дополнительного вмешательства в настройки пакета офис. Есть ли какой либо способ для запуска точно так же с разрешения, подписать ли макрос нужно? или единственный это ходить по всем компьютерам в компании и проставлять всем средний уровень без-ти?

XaKaC54

Цитата: JohnSUN от  9 февраля 2019, 22:58
Или название отдела живьём присутствует в какой-то колонке? Тогда вместо Tag можно использовать прямо надпись на кнопке и устанавливать фильтр... Это вроде как по-аккуратнее будет

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

kompilainenn

Цитата: XaKaC54 от 10 февраля 2019, 11:31или единственный это ходить по всем компьютерам в компании и проставлять всем средний уровень без-ти?
групповые политики вас спасут
Поддержать разработчиков LibreOffice можно тут, а наш форум вот тут

JohnSUN

Цитата: XaKaC54 от 10 февраля 2019, 11:31
чтобы при запуске файла они выбрали свой отдел, внесли изменения касательно него в одном столбце и вышли из файла сохранив его. единственное после нажатия кнопки и отображения нужных строк почему диалоговое окно не закрывается?
Так об этом в исходном вопросе ничего не было  ;)
Шутка, конечно... Просто у сценария может быть несколько вариантов продолжения - закрытие диалога это только один из них. Вот и не стал его реализовывать - а вдруг альтернативный вариант будет лучше?
Опять же - а если вдруг с первого раза кнопкой промахнулся и в чужой отдел попал? Как теперь свой отдел выбрать, если форма с кнопками уже закрылась? Пусть уж лучше по "крестику" щёлкают, нет?
Цитата: XaKaC54 от 10 февраля 2019, 11:31
какой параметр надо добавить?
Это не сложно. Например, можно перед каждым Exit Sub добавить oEvent.Source.getContext().endExecute()
oEvent.Source - это сама кнопка, которая вызвала событие
.getContext() - её "родитель", форма диалога
.endExecute() - метод диалога "закройся, пожалуйста"

Цитата: XaKaC54 от 10 февраля 2019, 11:31
Есть ли какой либо способ для запуска точно так же с разрешения..? или единственный это ходить по всем компьютерам в компании и проставлять всем средний уровень без-ти?
Менять уровень безопасности не обязательно. Там же, в настройках, в соседней вкладке есть "Доверенные источники". Насколько я понял, этот файл общий для всех, лежит где-то в сети? Вот путь к этой папке на каждом компьютере и добавить в "Доверенные".
И да - пройтись по офису нужно, за каждым компьютером посидеть, с людьми поговорить - где-то кофейку хлебнуть, где-то сигаретку стрельнуть... себя показать... А то ведь может сложиться мнение, что этот старый п... п... профессионал целыми днями сидит у себя в углу, всякой ерундой страдает, не понятно что делает...  ;)
Цитата: XaKaC54 от 10 февраля 2019, 11:40
Нет к сожалению люди из отдела в некоторых случаях разбросаны по всему документу.
Ну, это тоже можно было бы решить программно. И получилось бы даже изящнее, чем с диалогом. При открытии книги получить из системного окружения имя пользователя (ipetrova), по справочнику на соседнем листе найти его фамилию, как она употребляется в "простыне" (Петрова И.), отыскать все нужные строки и скрыть остальные. То есть, вообще без диалога - открываешь книгу и видишь только то, что тебя касается...
Но чтобы это реализовать, нужно будет, во-первых, переписать макрос, а во-вторых - всё равно пройтись по офису
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

XaKaC54

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

rami

Цитата: XaKaC54 от 10 февраля 2019, 11:31единственное после нажатия кнопки и отображения нужных строк почему диалоговое окно не закрывается? какой параметр надо добавить?
Я бы предложил добавить не код, а сделать обычную кнопку "Закрыть" в диалоге, тип кнопки — "OK". К тому же любой диалог по умолчанию закрывается клавишей ESC.

XaKaC54

Цитата: rami от 10 февраля 2019, 12:36
Цитата: XaKaC54 от 10 февраля 2019, 11:31единственное после нажатия кнопки и отображения нужных строк почему диалоговое окно не закрывается? какой параметр надо добавить?
Я бы предложил добавить не код, а сделать обычную кнопку "Закрыть" в диалоге, тип кнопки — "OK". К тому же любой диалог по умолчанию закрывается клавишей ESC.
Да отличное решение! так и сделаю.
Осталось разобраться как конкретные строки прописать, что-то я не догоняю пока как их показывать.

JohnSUN

Ну, "через запись макроса" в условиях StarOffice/OpenOfice/LibreOffice звучит как "через ж... желание сделать быстро".
Макрорекордер действительно может записать действия, которые можно выполнять повторно, но только самые простые действия. В Настройках эта птичка так и обозначена - "Включить запись макросов (ограничено)"
Если нужна хоть какая-то "продвинутость", то придётся всё писать руками.
Цитата: XaKaC54 от 10 февраля 2019, 12:41
Осталось разобраться как конкретные строки прописать, что-то я не догоняю пока как их показывать.
См. картинку. Но - опять-таки! - это не самое лучшее решение, это только для демонстрации КАК это можно было бы сделать


PS. Могу я тебя попросить выбрасывать из сообщений бОльшую часть цитат, оставлять только те слова, на которые отвечаешь?
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне