Не работает фильтр

Автор Александр Юровский, 28 января 2018, 18:22

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

Александр Юровский

Не работают функции фильтра "содержит", "не содержит", "начинается с", "заканчивается на". При задании таких фильтров calc убирает всю таблицу, как будто искомых данных нет (а они есть).

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

При этом в некоторых случаях фильтр начинает работать, но критерий отличия этих случаев от тех, где он не работает, я не смог найти. Заметил только, что там, где он работатет, при нажатии правой клавиши мыши есть меню "список выбора", а где не работает такого меню нет.

В таблице Google фильтр работает с теми же данными.

Версия Libroffice  5.4.2.2 для Ubuntu 17.10.1

mikekaganski

Спасибо за то, что поделились интересными наблюдениями! ;)

А если серьёзно - прикрепите пример, чтобы можно было говорить предметно.

(Ворчит) Ну неужели такие очевидные вещи требуют объяснения?
С уважением,
Михаил Каганский

Александр Юровский


JohnSUN

У меня для тебя плохая новость - под Windows книга ведёт себя правильно: стандартный фильтр нормально отобрал строки "Посилання заканчивается на 8", "Char20 содержит с.р" и т.п.
Видимо, проблема не в книге, а в настройках офиса. Я бы посмотрел в первую очередь Сервис-Параметры-Calc-Вычисления - в группе Общие вычисления никакие лишние флажки не выставлены?
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

Александр Юровский

Стоит только галочка напротив "Условия поиска = и <> должны распространяться на всю ячейку" (скрин в приложении). Но я пробовал ее убрать - без нее все так же.

JohnSUN

Да, эти настройки у меня такие же - но работает.
Знаешь, с давних пор, когда офис начинает вести себя странно, рекомендуют удалить (переименовать) профиль пользователя (Справка - Перезапуск в безопасном режиме - Возврат к настройкам установки - Сброс профиля пользователя)
Попробуешь?
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

Александр Юровский

Это помогло, но частично: в двух правых колонках в примере фильтр теперь работает, а в двух левых нет). Хотя попробовал второй раз сбросить профиль, но второй раз ничего новго не дал. Но это уже лучше. Спасибо!

mikekaganski

А в средней? :)

С числовыми данными не стоит работать, как будто это строки. "Начинается с", "Содержит" и т.д., применённые к числам, предполагают, что *число* и в самом деле содержит цифры. А на самом деле какую-то последовательность цифр может содержать только некое представление этого числа в определённой системе счисления, а вовсе не само число, которое является абстракцией-количеством, а в памяти и вообще хранится в двоичном виде согласно IEEE 754.
С уважением,
Михаил Каганский

Александр Юровский

В средней тоже нет).
Но если там написать буквы, то работает. До обновления профиля фильтр и написанные в старой колонке буквы не брал.
Если перевести формат колонок в текст (но по сути это останутся числа), то не работает.
Однако в других случаях фильтр сортирует по "содержит/не содержит" и цифры. Непонятна его избирательность.

Но вы правы, что с цифрами такой фильтр ставить почти не приходится, так что жить можно)

mikekaganski

Цитата: Александр Юровский от 28 января 2018, 21:20
Но если там написать буквы, то работает. ...
Если перевести формат колонок в текст (но по сути это останутся числа), то не работает.
Однако в других случаях фильтр сортирует по "содержит/не содержит" и цифры. Непонятна его избирательность.

Может быть, объяснение феномена "Если перевести формат колонок в текст (но по сути это останутся числа), то не работает" поможет Вам понять такую избирательность.

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

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

Если Вы указали, что столбец содержит текст, то что бы Вы туда ни вводили (будь это буквы, или цифры, или формулы, начинающиеся со знака "="), это воспринимается просто как текст. Оно может иметь вид чисел, но это текст. LO даже может проделывать с этим какие-то математические действия (в зависимости от настроек вычислений), но это всё равно текст. И поэтому с такими "числами" можно производить действия типа "содержит/начинается с". При этом форматирование этих ячеек не превратит текст в числа. Потому что форматирование - это изменение отображения. Если нужно превратить текст в числа (или наоборот) - требуется не изменять форматирование, а преобразовывать данные. Для этого у нас есть функция "Текст в столбцы".
С уважением,
Михаил Каганский

Александр Юровский

Большое спасибо!!!

Функция "Текст по столбцам" - то, что я искал. После нее все работает как по маслу))

economist

Вывод: если автофильтр не работает как ожидается - значит либо данные "не те" (текст вместо числа или вообще их "смесь"), либо данные "не там", например есть объединения ячеек и истинное местоположение данных неизвестно, либо область для автофильтрации не была выделена вся заранее, и автофильтр её сузил на своё "усмотрение". 

Немного off, но в Microsoft Excel, кстати, то же самое. Вот список текущих глюков автофильтра Excel (чтобы было ясно куда не надо стремиться разработчикам и пользователям, а также на заметку тем, кто часто, как я, использует VBA-код в LibreOffice Calc):

1) Автофильтр Excel считывает только первые 10 тыc. значений уникальных элементов в выпадающий список, поэтому если вы чего-то не нашли в нём - не удивляйтесь, виноват Excel.

2) При четырехкратной смене значений дат и текста "как дата" по мере продвижения вниз - Автофильтр перестанет отображать "хвост" данных. Вот да, просто так.

3) При попытке программно (через VBA) назначить критерий автофильтра в виде даты - ждет облом, но будет работать "просто текст", похожий на дату, а все что ниже, взятое из MSDN, StackOverFlow и др. уважаемых мест  - увы, работать в русском MS Excel не будет:
.AutoFilter Field:=8, Criteria1:=CDate("#" & Target.Value "#" &
.AutoFilter Field:=8, Criteria1:="#" & CDate(Target.Value) & "#"
.AutoFilter Field:=8, Criteria1:=Array(2, Format(CDate(Target.Value), "mm\/dd\/yyyy"))
.AutoFilter Field:=8, Criteria1:=DateSerial(2017, 12, 1)   
Проблема с языковыми стандартами, и   

4) Ранее работавший автофильтр может начать работать неправильно, если с диапазоном была "хирургия" (вставлялись строки, добавлялись столбцы итп). Вот почему лучше всего Автофильтр "запускать" по заранее именованному диапазону. В случае с Excel - этот диапазон из-за странностей приходится пересоздавать (вручную или программно), т.к. Excel его хитро кэширует.

Вышеназванных 4-х пунктов с родным автофильтром в Calc - нет.
Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...