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

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

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

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

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



« Ответ #30: 14 Январь 2021, 08:59 »

багрепорт пишите
А в Excel не всё однообразно (значит, безобразно)...
3) функция СЧЁТЕСЛИ() – <работает> по принципу "точно соответствует". Используется в паре с функцией ЕСЛИ().
Сам себя цитирую Улыбка
Видимо, разработчик обеспечил соответствие поведения функции COUNTIF (другие не проверялись) поведению той же формулы в Excel. Всё так, с той лишь разницей, что в Excel нет вышеупомянутого флажка и в Справке написано иначе (с учётом флажка).
Написать багрепорт будет непросто: задействованы Параметры, Справка, Руководство по Calc 6.2, Excel... и всё надо давать по-английски не в вольном переводе, а как в оригинале, а у меня русская версия Calc и Справки, и т.д., соответственно. Потом, вероятно, проверке надо подвергнуть весь перечень функций:
database functions, and VLOOKUP, HLOOKUP, MATCH, AVERAGEIF, AVERAGEIFS, COUNTIF, COUNTIFS, SUMIF, SUMIFS, and SEARCH.

UPD:
Проверка функции базы данных DCOUNT выявила ту же проблему: работает, как COUNTIF, но ведь DCOUNT - функция базы данных, требует диапазона условий на листе, и в отличие от стандартного и расширенного фильтров, которые тоже работают с диапазоном условий на листе, НАПРОЧЬ ИГНОРИРУЕТ ВЫШЕУПОМЯНУТЫЙ ФЛАЖОК (пример прилагается; точнее, не работает с "simple comparisons", и надо добавить хоть пару скобок, о чём писал выше в ответе #25). Расширенный фильтр в примере потребует от вас заполнить все поля заново, чтобы обновить фильтр. DCOUNT обновляется автоматически. Данные рассогласованы. Этакую "непоследовательность" и ошибки данных следует отнести к грубым ошибкам.
Помог бы кто-нибудь с багрепортом... ибо в Calc'е "отвалился целый кусок" Непонимающий

Поставил флажок обратно. Так надежнее
Выходит, что так надёжнее...

UPD2:
Файл примера обновлён.

* Пример (2).ods (154.64 Кб - загружено 5 раз.)
« Последнее редактирование: 14 Январь 2021, 10:46 от eeigor » Записан

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

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



« Ответ #31: 14 Январь 2021, 10:58 »

>а у меня русская версия Calc и Справки,

ну так поставьте английские версии. А багу сначала нужно правильно сформулировать по-русски. Я, например, не понимаю, в чем проблема. В справке? В работе функций? В работе функций в условном форматировании?
Записан

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

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



« Ответ #32: 14 Январь 2021, 11:03 »

Я, например, не понимаю, в чем проблема.
В прилагаемом примере данные рассогласованы:
расширенный фильтр вернул результат, а функция базы данных DCOUNT вернула 0. И то, и другое обрабатывают один и тот же диапазон условий.
Но DCOUNT не работает с "simple comparisons" и требует каких-л. "опознавательных признаков" регулярного выражения, например пары скобок.

UPD:
А согласно Справки должна самостоятельно обрамлять условие символами ".*" слева и справа от него. Именно так написано. И именно в этом смысл флажка. И, наконец, именно так работают фильтры.

UPD2:
Проблема в опции, которую @Bigor назвал ненадёжной, а я попытался выяснить, в чём причина.

Параметры – LibreOffice Calc – Вычисления
 Общие вычисления
  Условия поиска = и <> должны распространяться на всю ячейку

UPD3:
Это, по сути, уже оффтоп. Мы решаем проблему, с которой столкнулись в ходе решения задачи автора темы, а обсуждение которой уже "размазано" по ветке:
Тогда должно работать и без ".*", но у меня что-то не вышло. А почему?
=IF(AND(COUNTIF($A4;"abc");COUNTIF($A4;"123"));1;0)


* Снимок экрана от 2021-01-14 12-16-55.png (100.66 Кб, 1762x499 - просмотрено 5 раз.)
« Последнее редактирование: 14 Январь 2021, 12:17 от eeigor » Записан

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

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



« Ответ #33: 14 Январь 2021, 12:40 »

Уважаемые форумчане, я поясню суть проблемы на примере фрагмента своих данных (скриншот прилагается).
Желтым выделен диапазон условий с именем "Условия".
Ниже строка итогов. Ещё ниже следует диапазон базы данных с именем "БД".

В строке итогов используется функция SUBTOTAL.
Пример:
=SUBTOTAL(103;БД_ФИО)  'диапазон БД_ФИО д.б. создан, и это неудобно, ведь это поле диапазона базы данных (!)

Удобнее так:
=DCOUNTA(БД;"ФИО";Условия)
Или вот так, если работаем по всем столбцам:
=DCOUNT(БД;0;Условия)

Очень наглядно и удобно. Как в Excel.
Но использование функций базы данных приводит к вышеописанным ошибкам при снятом вышеупомянутом флажке (на скриншоте в поле 0 вместо 81).
А функция SUBTOTAL не понимает структурных ссылок базы данных. Точнее, понимает, но заменяет их абсолютными ссылками после повторного открытия файла. Я имею в виду следующее:
Код:
=SUBTOTAL(103;БД[ФИО])  'структурная ссылка вместо ссылки на диапазон БД_ФИО, который нужно создавать
После открытия файла ссылка будет заменена:
=SUBTOTAL(103;$Данные.$F$10:$F$1982)

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


* Снимок экрана от 2021-01-14 12-25-33.png (42.91 Кб, 1441x269 - просмотрено 7 раз.)
« Последнее редактирование: 14 Январь 2021, 14:13 от eeigor » Записан

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

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



« Ответ #34: 14 Январь 2021, 15:07 »

НА ЗАМЕТКУ

Да, это важные, и скрытые от пользователя, параметры. А как с этим бороться, сказано здесь (почитайте раздел "There are two ways to combat this:").

Крайне пользительно:
COUNTIF(A3;".*") returns 1 if regular expressions are turned on.
COUNTIF(A3;"<>e") returns 1 if whole cell matching is turned on.

Однако, разбирая этот материал, вы столкнётесь всё с той же описанной выше проблемой.
У вас не будет работать выражение №2, пока вы не заключите его, к примеру, в круглые скобки:
=COUNTIF(A3;"<>(e)")

И судя по всему, этого раньше не было...
« Последнее редактирование: 14 Январь 2021, 15:22 от eeigor » Записан

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

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


WWW
« Ответ #35: 14 Январь 2021, 17:08 »

Для справки. В Excel использование "D-функций" не рекомендуется разработчиком, функции SUMIFS, COUNTIFS значительно удобнее.
Записан

Владимир.
eeigor
Форумчанин
***
Offline Offline

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



« Ответ #36: 14 Январь 2021, 17:47 »

sokol92, спасибо. Но в моём частном случае D-функции позволяют работать с именами полей. Я только что закончил "сражение" с расширенным фильтром в Calc, и полностью автоматизировал процесс. И хотя без заплатки не обошлось, но в целом получилось удобно. Поэтому для меня наличие диапазона условий на листе – норма: фильтруется быстро, и критерии на глазах. В этом случае удобны D-функции, так как они работают с именами полей диапазона базы данных, а новые функции – нет (а в Excel-то работают прекрасно со смарт-таблицами). По скорости они одинаковы и существенно опережают формулы массива.

Вероятно, расширенный фильтр, диапазоны БД и функции БД – не самый распространённый способ обработки данных.
Приведу ещё один аргумент: в Calc сравнительно бедные сводные таблицы. Но дело даже не в этом, а в том, что СТ не позволяют объединять критерии оператором "ИЛИ", для этого создают вспомогательные столбцы в исходных данных. Расширенный фильтр (а в Calc ещё и Стандартный фильтр, но он не нагляден) прекрасно с этим справляется (И+ИЛИ). Впрочем, и здесь приходится иногда использовать вспомогательные столбцы, чтобы хранить устоявшиеся варианты отбора данных. Схема та же:
=IF(OR(AND(COUNTIF(...);...);...);1;0)

UPD:
Всё, о чём я писал, имеет значение для тех, кто что-то разрабатывает для других. В общем, для комплексных решений. Я, к тому же, восстанавливаю утраченную функциональность после ухода с Excel.
« Последнее редактирование: 14 Январь 2021, 18:18 от eeigor » Записан

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

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



« Ответ #37: 14 Январь 2021, 21:47 »

https://bugs.documentfoundation.org/show_bug.cgi?id=139612
Записан

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

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



« Ответ #38: 14 Январь 2021, 22:09 »

Респект. kompilainenn, я не предполагал, что можно файл примера прилагать на русском. Значит, можно?
Я смотрю, что Mike Kaganski уже добавил свой комментарий.
Единственное, осталось за кадром текущее решение проблемы. Если решение в виде пары скобок или других "опознавательных признаков" может что-то разъяснить. Впрочем, я об этом постарался сообщить...
« Последнее редактирование: 14 Январь 2021, 23:00 от eeigor » Записан

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

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



« Ответ #39: 14 Январь 2021, 23:09 »

не предполагал, что можно файл примера прилагать на русском. Значит, можно?
Какая разница, если мы смотрим на число?
Записан

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

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


« Ответ #40: 15 Январь 2021, 09:32 »

@eeigor - поддерживаю! Диапазоны БД в Calc - действительно очень быстрый и мощный инструмент (такого нет даже в Excel), потому что:

- Они "прячут" всю БД-сущность от пользователя. Он понятия не имеет откуда взялись данные, кто за него ввел логины/пароли тем самым 1С/Экселям/etc, почему данные "не убиваются" правкой и сами восстанавливаются при открытии файла или по кнопке. Большинство юзеров воспринимают это как настоящее офисное чудо.

- Можно использовать данные из разных БД (sqlite, DBF, TXT итд) на одном листе (или даже заменяя поверх), обойтись без муторного кодинга Форм Base и уж тем более муторных Диалогов BASIC (где необходима обработка кучи возможных событий и тупняков юзера вроде нажатия Esc и потери фокуса).

- Calc становится самым доступным конструктором одно-оконных интерфейсов бизнес-приложений, а всю логику и скорость "большого ПО" - обеспечивает "невидимый" SQLite или PostrgreSQL (и сервер с NVMe RAID массивом, на котором всё быстро это крутится). Представляете сколько работы можно спихнуть на юзеров? Они ведь будут рады, что сами себе нарисовали "форму", и формулами, усл. форматом - сделали то, чем будут гордиться и с удовольствием использовать.

- Макросом можно легко "подменить" дескртиптор DatabaseRange, а там можно сменить не только "SELECT...", но и даже движок БД на принципиально другой. И, самое главное, быстрее механизма doImport для получения данных из огромных баз, похоже, в OpenOffice|LibreOffice - нет:
Код:
oDBR = thisComponent.DataBaseRanges.getByName("Импорт1")
oDesc() = oDBR.getImportDescriptor()
oDesc(0) = "ДебиторыODB" ' а еще есть ГороскопCVS.ODB :-)
oDesc(2) = "SELECT..."
oDBR.getReferredCells.doImport(oDesc())

- У DatabaseRange есть отдельный Автофильтр, которым макросом можно управлять независимо от прочих (и куча команд Диспетчера). Кстати, его критерии можно хранить в ячейках выше, реализуя классический 1С/SAP-подобный интерфейс: "шапка" с кнопками (и итогами!) и "табличная часть" ниже. Ничего более эргономичного для "офисных/бух" данных пока не изобрели.
Записан

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

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



« Ответ #41: 15 Январь 2021, 11:22 »

@economist, мне было интересно почитать.

P.S. Вообще, монологи от @economist традиционно вдохновляют и направляют…
« Последнее редактирование: 15 Январь 2021, 11:26 от eeigor » Записан

Ubuntu 18.04 LTS • LO 7.1.1.2 Community
Mric
Участник
**
Offline Offline

Сообщений: 17


« Ответ #42: 19 Январь 2021, 15:48 »

Чтобы не создавать новую тему, тут еще одна загвоздка возникла. Я выделяю Условным Форматированием ячейки, которые повторяются. Все работает, но как мне удалить строки с подсеченными ячейками автоматом все?
Записан
economist
Форумчанин
***
Offline Offline

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


« Ответ #43: 19 Январь 2021, 16:27 »

1) Повторите формулу из условного форматирования в пустом столбце
2) включите Автофильтр, отберите нужные строки
3) выделите отобранное, удалите

В Calc нет Фильтра по цвету (заливки и шрифта), какой есть в Excel, пожелания высказывались, когда-нить допилят и в LO.   
Записан

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

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



« Ответ #44: 19 Январь 2021, 16:29 »

Я выделяю Условным Форматированием ячейки, которые повторяются. Все работает, но как мне удалить строки с подсеченными ячейками автоматом все?
Так может следовало просто удалять дубликаты, а не кружиться с условным форматированием?
Записан

Поддержать разработчиков LibreOffice можно тут, а наш форум вот тут
Страниц: « 1 2 3 4 »   Вверх
  Печать  
 
Перейти в:  

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