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

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

26 Январь 2022, 07:31 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

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

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



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

Вот тут справка по функции COUNTIF().
Читаю:
Если флажок Условия поиска = и <> должен распространяться на всю ячейку установлен, то условие “red” будет соответствовать только red; если не установлен оно будет соответствовать red, Fred, red herring.

Пробую... нет. Требуется точное соответствие, или надо всегда обрамлять строку поиска символами ".*" вне зависимости от установки вышеупомянутого флажка. Причём так работает и для регулярных выражений, и для подстановочных символов (обрамлять "*"). В смысле, не работает.
А как у других?

UPD:
Зато на работу функции REGEX() вышеупомянутый флажок никак не повлиял: ищет в любом случае (??). Зато есть параметр "g".

Но на работу стандартного и расширенного фильтров этот флажок влияет, как заявлено. Путаница, конечно.

UPD2:
Однако в справке сказано немного по другому (кнопка "Справка" в окне Параметры - Вычисления):
Когда установлен флажок Условия поиска = и <> должны распространяться на всю ячейку, поведение LibreOffice Calc полностью совпадает с поведением MS Excel при поиске ячеек в функциях базы данных.
Если флажок Условия поиска = и <> должны применяться к ячейкам целиком не установлен, шаблон поиска "win" работает подобно ".*win.*". Шаблон поиска может находиться в любом месте ячейки при поиске с помощью функций базы данных Calc.

Но это ведь не для COUNTIF()? Значит, вероятно, в описании этой функции ошибка. Флажок работает для фильтров и функций (формул) базы данных. А функции базы данных, как и расширенный фильтр, требуют ссылки на диапазон условий на листе. Могу ошибаться.

UPD3:
А вот разъяснения из Руководства по Calc 6.2 (которое переводит для нас kompilainenn):

Enable wildcards in formulas
Enable wildcards in formulas specifies that wildcards are enabled when searching and also for character string comparisons. This relates to the database functions, and to VLOOKUP, HLOOKUP, MATCH, AVERAGEIF, AVERAGEIFS, COUNTIF, COUNTIFS, SUMIF, SUMIFS, and SEARCH. Select this option for spreadsheets that need to be interoperable with Microsoft Excel.

Enable regular expressions in formulas
Enable regular expressions in formulas specifies that regular expressions instead of simple wildcards are enabled when searching and also for character string comparisons. This relates to the database functions, and to VLOOKUP, HLOOKUP, MATCH, AVERAGEIF, AVERAGEIFS, COUNTIF, COUNTIFS, SUMIF, SUMIFS and SEARCH. Do not enable regular expressions in formulas for spreadsheets that need to be interoperable with Microsoft Excel.

Информация НЕпротиворечивая. По функции COUNTIF, в частности. Но ожидаемого результата нет...

UPD4:
А вот и косяк:
Флажок Условия поиска = и <> должен распространяться на всю ячейку сброшен.
A5: Fred   <-- ищем в ячейке:
=COUNTIF($A5;"red")  'и не находим
=COUNTIF($A5;"r.d")  'и находим

А так не должно быть. "red" - это такое же выражение, как и "r.d". Но Calc не распознаёт "red" как регулярное выражение. А должен был сам пристегнуть символы ".*" с обоих сторон, как сказано в справке.
А это значит, что лучше обрамлять условие поиска символами ".*", что в решении, предложенном автору этой темы и было сделано! Поправьте меня, если я не прав...
Но расширенный фильтр с диапазоном условий РАБОТАЕТ ПРАВИЛЬНО.

UPD5:
Я немного неправ. Хотя и неожиданно. Но в руководстве по Calc 6.2 сказано (page 244):

Regular expressions will not work in simple comparisons. For example: A1="r.d" will always return FALSE if A1 contains red, even if regular expressions are enabled. It will only return TRUE if A1 contains r.d (r then a dot then d). If you wish to test using regular expressions, try the COUNTIF function: COUNTIF(A1,"r.d") will return 1 or 0, interpreted as TRUE or FALSE in formulas like =IF(COUNTIF(A1,"r.d"),"hooray","boo").

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

Прошу прощения для столь длинный монолог. Ещё момент:
=COUNTIF($A5;"(red)")  'и находим
=COUNTIF(A5;"()red")  'тоже находим
А почему?
Активация параметра Включить регулярные выражения в формулах означает, что все вышеперечисленные функции будут требовать любые специальные символы регулярных выражений (например, круглые скобки)...

Хотя смысл фразы выше немного другой (page 244):
Activating the Enable regular expressions in formulas option means all the above functions will require any regular expression special characters (such as parentheses) used in strings within formulas, to be preceded by a backslash, despite not being part of a regular expression. These backslashes will need to be removed if the setting is later deactivated.
« Последнее редактирование: 13 Январь 2021, 21:46 от eeigor » Записан

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