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

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

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

Войти
Новости: Доступно и просто о работе в офисных пакетах
 
   Начало   Помощь Поиск Войти Регистрация    задать вопрос  
Страниц: 1 2 »   Вниз
  Печать  
Автор Тема: Копирование ячейки после автофильтра.  (Прочитано 972 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Алексей Ч
Участник
**
Offline Offline

Сообщений: 10


« Стартовое сообщение: 11 Март 2021, 22:00 »

Добрый день!

Прошу помочь.

Первая таблица с исходными данными.
В ней мы применяем автофильтр, в результате чего видимыми остаются от 1 до 10 строк.
Несколько ячеек из каждой строки нужно перенести в таблицу результатов.

Вторая таблица - таблица результатов.
Своими ячейками она должна быть привязана к результату фильтрации таблицы данных.

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

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

Поискал функции, но тщетно.

Заранее спасибо.





Записан
eeigor
Форумчанин
***
Offline Offline

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



« Ответ #1: 11 Март 2021, 22:14 »

Стандартный и расширенный фильтры, в отличие от автофильтра, позволяют скопировать результат в указанное место. И тогда вся задача надуманна.
« Последнее редактирование: 11 Март 2021, 22:17 от eeigor » Записан

Ubuntu 18.04 LTS • LO 7.1.1.2 Community
economist
Форумчанин
***
Offline Offline

Сообщений: 1 424


« Ответ #2: 11 Март 2021, 22:16 »

Макрос, скажем, по кнопке  может перебрать результат фильтрации (видимые строки), например это строки 2,5,7 и создать на второй таблице в другом листе
формулы в строках 1,2,3 виде
=Лист1!A2, =Лист1!B2, =Лист1!C2
=Лист1!A5, =Лист1!B5, =Лист1!C5
=Лист1!A7, =Лист1!B7, =Лист1!C7

Это не сложно, но почему просто не скопировать результат фильтрации?
Будет правка столбцов B/C? Тогда формулы будут заменены на значения.
А что должно быть при смене фильтра?  
Записан

Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...
kompilainenn
Мастер
*****
Offline Offline

Сообщений: 3 250



« Ответ #3: 11 Март 2021, 22:27 »

Мне кажется, что решение задачи через фильтрацию не верное в принципе. Лучше покажите, что за данные (просто пример), и что в итоге вы из них хотите сделать/увидеть? Возможно есть более автоматизированное решение
Записан

Поддержать разработчиков LibreOffice можно тут, а наш форум вот тут
eeigor
Форумчанин
***
Offline Offline

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



« Ответ #4: 11 Март 2021, 22:34 »

Я тоже ничего не понял. Но если автор хочет работать с пересечением диапазонов, то для этого предусмотрен соответствующий синтаксис, а не формула:
=5:5!A:A
И в заданную ячейку ляжет значение ячейки, находящейся на пересечение строки 5 со столбцом A (как у автора). Восклицательный знак означает пересечение.
« Последнее редактирование: 11 Март 2021, 22:36 от eeigor » Записан

Ubuntu 18.04 LTS • LO 7.1.1.2 Community
eeigor
Форумчанин
***
Offline Offline

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



« Ответ #5: 11 Март 2021, 22:42 »

По сути, нужно сделать ссылку не на адрес ячейки, а на определенную область листа...
Э, нет... Так не получится, потому что данные при фильтрации автофильтром остаются на своих местах, а не переносятся в некую отфильтрованную область.

UPD
Так что стандартным/расширенным фильтром. Если нужна не вся строка, а определенные ячейки, то "ненужные" столбцы из источника данных нужно в соответствии с порядком их следования просто скрыть в результирующем диапазоне. "Ненужные" данные лягут в скрытые столбцы, но строки будут скопированы полностью.
« Последнее редактирование: 11 Март 2021, 22:48 от eeigor » Записан

Ubuntu 18.04 LTS • LO 7.1.1.2 Community
Алексей Ч
Участник
**
Offline Offline

Сообщений: 10


« Ответ #6: 11 Март 2021, 22:51 »

Пример 1.
После фильтрации в таблице данных три строки.

Таблица данных                  Таблица результатов         
                           
Иванов   1   2   3         Иванов   1   2   3
Петров   4   5   6         Петров   4   5   6
Сидоров   7   8   9         Сидоров   7   8   9

Пример 2.
После фильтрации в таблице данных две строки

Таблица данных                  Таблица результатов         
                           
Петров   4   5   6         Петров   4   5   6
Сидоров   7   8   9         Сидоров   7   8   9
                              0          0   0   0

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

Таблица данных                  Таблица результатов         
                           
Петров   4   5   6         Петров   4   5   6
                                0   0   0   0
                                0   0   0   0

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

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

Надеюсь, понятно изложил.



Записан
eeigor
Форумчанин
***
Offline Offline

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



« Ответ #7: 11 Март 2021, 23:13 »

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

UPD
Я обновил файл. Загрузите заново.

* Untitled 2 (1).ods (156.3 Кб - загружено 4 раз.)
« Последнее редактирование: 12 Март 2021, 00:03 от eeigor » Записан

Ubuntu 18.04 LTS • LO 7.1.1.2 Community
kompilainenn
Мастер
*****
Offline Offline

Сообщений: 3 250



« Ответ #8: 11 Март 2021, 23:36 »

Надеюсь, понятно изложил.
нет
Записан

Поддержать разработчиков LibreOffice можно тут, а наш форум вот тут
eeigor
Форумчанин
***
Offline Offline

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



« Ответ #9: 11 Март 2021, 23:38 »

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

UPD1
И из каждой таблицы данных после фильтрации результаты фильтрации должны "стекаться" в таблицу результатов.
Это явный признак того, что дробить данные по листам-таблицам - не лучшее решение.

UPD2
Обновил файл. Добавил всё в одну таблицу. Результат идентичен предыдущему.

* Untitled 2.ods (156.35 Кб - загружено 5 раз.)
« Последнее редактирование: 12 Март 2021, 00:06 от eeigor » Записан

Ubuntu 18.04 LTS • LO 7.1.1.2 Community
Алексей Ч
Участник
**
Offline Offline

Сообщений: 10


« Ответ #10: 12 Март 2021, 00:33 »

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

UPD1
И из каждой таблицы данных после фильтрации результаты фильтрации должны "стекаться" в таблицу результатов.
Это явный признак того, что дробить данные по листам-таблицам - не лучшее решение.

UPD2
Обновил файл. Добавил всё в одну таблицу. Результат идентичен предыдущему.
А почему бы вам не расположить данные на одном листе в одной таблице, добавив одно дополнительное поле, позволяющее эти два набора данных различить? Они, как я понимаю, имеют одинаковую структуру. И тогда всё, чего много, сведётся к одному: один фильтр расширенный, один результат скопированный и т.д. Мудрите, однако... Так не делают. Точнее, делают по-всякому.

UPD1
И из каждой таблицы данных после фильтрации результаты фильтрации должны "стекаться" в таблицу результатов.
Это явный признак того, что дробить данные по листам-таблицам - не лучшее решение.

UPD2
Обновил файл. Добавил всё в одну таблицу. Результат идентичен предыдущему.

По-моему, это то, что нужно.

Каждый лист посвящен отдельному виду строительно-монтажных работ.
Новый строящийся объект - конструктор в который мы по ситуации накидываем элементы (те или иные листы).

Где-то листов будет два, где-то их придется задействовать с десяток.

Предыдущая версия была как раз на одном листе, но слишком много ручной работы и слишком неудобно лазить по всему листу в поисках того или иного блока.
Возможно, как-то это можно было оптимизировать, но я решил попробовать вариант с разбивкой на виды работ.
С большой базой данных известных параметров.

Мне кажется, вопрос решен. Примонстрячу к своим табличкам и в бой. Спасибо Вам большое-)

ЗЫ С другой стороны, может быть, Вы и правы по поводу одной большой таблицы условий...надо подумать, как это реализовать, чтобы оно не было огромным монстром.
Записан
kompilainenn
Мастер
*****
Offline Offline

Сообщений: 3 250



« Ответ #11: 12 Март 2021, 00:42 »

Ооо, коллега строитель. Было бы интересно взглянуть на ваш файл. И узнать, какие задачи он решает
Записан

Поддержать разработчиков LibreOffice можно тут, а наш форум вот тут
eeigor
Форумчанин
***
Offline Offline

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



« Ответ #12: 12 Март 2021, 05:39 »

Нет. Я знаю точно, что правильно, когда все данные одинаковой структуры лежат в одном месте. Одна "сущность" (entity) – одна таблица. В вашем случае, с полем "Вид работ" или "Код работ". "Лазить" по всему листу не надо: надо научиться фильтровать данные. Тема фильтров с использованием регулярных выражений – отдельная сложная тема, но в моём примере поиск идёт по полному значению без них (флажок "Использовать регулярные выражения" сброшен).
"Разбивка" данных и привела к усложнению их обработки и анализа. Но вести данные правильно тоже надо уметь: данные должны лежать в таблице в виде записей, никакой дополнительной информации выше-ниже, в виде заголовков разделов выше или итогов ниже…
Расширенный фильтр позволяет всегда видеть текущие условия отбора (это удобно), а также, в отличие от автофильтра, соединять их оператором "ИЛИ", как и "И" (автофильтр – только "И").

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

Похоже, вы не знаете ещё и о других инструментах анализа: таблицы подстановки (multiple operations) с формулами массива, сводные таблицы.
Пользователи потому и "городят огород", потому что "не хотят" хранить данные в виде записей в таблицах и решать все связанные с этим проблемы (избыточность информации, её противоречивость (лишний пробел, например), ссылочная целостность и прочая ерунда, которая вовсе и никакая не ерунда)…

Я тоже считаю, что на ваш вопрос мы ответили. Успехов. И заглядывайте сюда почаще.
« Последнее редактирование: 12 Март 2021, 06:44 от eeigor » Записан

Ubuntu 18.04 LTS • LO 7.1.1.2 Community
Алексей Ч
Участник
**
Offline Offline

Сообщений: 10


« Ответ #13: 14 Март 2021, 23:40 »

Потестировал на реальных примерах - автофильтр + копипаст оставшихся на листе после фильтрации строк удобнее чем использование расширенного фильтра. Быстрее.

Поэтому вернусь к вопросу - можно ли автоматизировать  процесс копирования видимых строк с одного листа на другой?
Т.е., если после автофильтра остаются видимыми 10 строк, то они и копируются, если ни одной, то в результирующей таблице в этом блоке пусто.
Можно по нажатию кнопки, наверно, т.е. итоговая таблица изначально пуста, а на каждом листе есть кнопка, копирующая видимые ячейки области этого листа в соответствующий блок итоговой таблицы результатов.
Ну или в режиме онлайн, без кнопок, просто в реальном времени копирование текущей на определенной области листа ситуации в таблицу результатов.

Обременять никого не хочется сильно, поэтому, если это глубоко в питоне-sql, скажите. В этом случае буду признателен за какие-нибудь ссылки полезные по теме для самостоятельного разбора.
Ну или за разъяснения, что результат не стоит потраченного времени-)

Во вложении часть моего файла с одним из подразделов и результирующей таблицей.

Спасибо.

* таблица.ods (23.05 Кб - загружено 4 раз.)
Записан
eeigor
Форумчанин
***
Offline Offline

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



« Ответ #14: 15 Март 2021, 00:03 »

@Алексей Ч, ваша таблица "заточена" под работу вручную: пустые строки, итоги под данными (их следует вынести, к примеру вверх и расположить над, то есть вне диапазона). Работа с электронной таблицей как с "бумажным" листом, когда "можно всё", и порождает трудоёмкую и ненужную работу, которую предстоит выполнять вам. Вы не готовы учиться и работать правильно (см. мой ответ #12). Работайте вручную. Если кто-то не захочет-таки заниматься этим...
На этом форуме есть решение, позволяющее автоматизировать расширенный фильтр. При правильном построении данных никакой перенос отфильтрованных данных, скорее, не потребуется.
« Последнее редактирование: 15 Март 2021, 00:08 от eeigor » Записан

Ubuntu 18.04 LTS • LO 7.1.1.2 Community
Страниц: 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!