В автофильтре по дате пропало указание на год.[РЕШЕНО]

Автор Alexcostariha, 3 мая 2023, 15:13

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

Alexcostariha

Libreoffice 7.3.7.2 Linux Mint 21 Cinnamon.
Добрый день! Имеется отформатированная таблица. В ней с десяток столбцов с датами. В двух столбцах через автофильтр не виден год даты - видно только число и месяц. Соответственно эти столбцы не фильтруются по годам.Только по месяцам и числам месяца. Очень неудобно. Как исправить?
 В приложенном файле показаны неработающие столбцы. Они указывают на одинаковые даты, только один столбец явно показывает число и месяц, а другой - только название месяца. Фактически не работает первый столбец, поскольку второй, с названием месяца, является ссылкой на него. В окошке с формулами, при переходе между ячейками, полные даты первого столбца  видны.
См. решение в конце.

mikekaganski

Это можно назвать багом. Автофильтр смотрит только на статическое форматирование своих ячеек, когда определяет, есть ли в столбце даты (и тогда он покажет дерево по годам, месяцам и дням).

В качестве обхода я бы использовал вместо условного форматирования использовать нормальный формат ячеек "DD MMM.", а уже "нет"/пусто назначать с помощью условного форматирования.
С уважением,
Михаил Каганский

Alexcostariha

Баг Это видимо как-то связано с последними обновлениями, поскольку до сих пор всё работало.
 Могли бы вы пояснить подробнее что там нужно изменить? Таблицу я делал давно и уже сам не понимаю как она работает. :(

sokol92

Выделите в своем примере столбец Q и отформатируйте как дату (любой формат даты подойдет). После этого автофильтр будет более сговорчивым.
Владимир.

Alexcostariha

#4
 sokol92, mikekaganski Менять форматирование не то. Это долго.
 Нашлось такое решение. Скажем нам нужно выбрать май 2018 г. Это даты с 01.05.2018 по 30.05.2018. У Автофильтра имеется Стандартный фильтр. Заполняем его датами в числовом формате для значений больше последнего дня предыдущего месяца - это дата 30 апреля 2018 г. и меньше первого дня последующего месяца - это дата 01 июня 2018 г. Соответственно в числах  это будет "> 43220" и "< 43252". Как видим на скриншоте 1 - всё получилось. Другие настройки "Начинается с" и "Оканчивается на", - не работают. В таком виде мы получаем числовые значения для месяца в году. Для снятия фильтра нажимаем "Очистить фильтр". Поскольку мы совершаем насилие над Libreoffice лучше для этого создавать копию файла и потом её удалять.
Узнать числовой формат для даты в Libreoffice. Узнать числовой формат для нужной даты можно так: в любой ячейке прописываем дату, затем меняем формат ячейки(мышка->правая кнопка) на числовой(можно просто посмотреть, не меняя).
Узнать числовой формат для даты в терминале Linux.
 Числовой формат даты - это количество дней от нулевой даты. Нулевая дата в Libreoffice - это 30 декабря 1899 года. См. скриншот 2. Команда "date" умеет переводить даты в секунды от нулевой даты;  нулевая, она же эпохальная(Epoch) дата у команды date 1970-01-01 00:00 UTC. Поскольку мы будем считать разницу дат, то нам эта разница в нулевых датах без разницы ^-) .
 Для подсчёта разницы в днях нужно перевести секунды в дни, то есть поделить результат вычитания на 24×60×60. Воспользуемся функцией BASH для арифметических вычислений $((expression)). Начальную дату для вычислений нужно взять днём ранее нулевой даты в Libreoffice - 29.12.1899 г.. Это связано с тем, что количество секунд в сутках может меняться(при смене часового пояса, например) и команда date на 23 год даёт ошибку примерно в 30 мин. из-за чего, при вычислениях целых чисел, недостаёт одного дня.
 Вычисляем количество дней от нулевой даты для 30 апреля 2018 г.:
$ echo $((($(date +%s --date "2018-04-30")-$(date +%s --date "1899-12-29"))/(3600*24))) дней
       43220 дней
Вычисляем количество дней от нулевой даты для 01 июня 2018 г.:
$ echo $((($(date +%s --date "2018-06-01")-$(date +%s --date "1899-12-29"))/(3600*24))) дня
       43252 дня
  Подставляем полученные числовые значения в Стандартный фильтр.
  Спасибо sokol92, mikekaganski за ответы. Это помогло найти решение.
 В старой версии Libreoffice всё работало. Ждём следующих обновлений?  ???

kompilainenn

Цитата: Alexcostariha от  4 мая 2023, 06:13В старой версии Libreoffice всё работало. Ждём следующих обновлений?
Баг репорт был на вашу проблему? Если нет, то ничего в будущих версиях Либры не изменится
Поддержать разработчиков LibreOffice можно тут, а наш форум вот тут

Alexcostariha

#6
Написал небольшой скрипт для подсчётов одной командой. Файл следует скачать, перенести в папку ~/bin и сделать исполняемым; расширение ".txt" можно убрать.

sokol92

Цитата: Alexcostariha от  4 мая 2023, 06:13Менять форматирование не то. Это долго.
Открываем Ваш файл из стартового сообщения.

1. Выделяем мышью столбец Q (щелкаем по заголовку столбца "Q").
2. Ctrl+1 (диалог Формат ячеек). В списке "Категория" выбираем  "Дата" и в списке Формат" любой подходящий элемент (например, 31.12.1999).

Теперь нажимаем на стрелку Автофильтра в столбце Q и видим там даты в "обычном" виде.

Если нравится работать с датами как целыми числами, то для этого не нужна помощью со стороны (Linux).
Напишите в ячейке B1 формулу
=A1
Отформатируйте B1 с помощью любого формата Категории "Числовой" кроме Standard.
Теперь при занесении даты в ячейку A1 вы будете видеть соответствующее целое число в ячейке B1.
Владимир.

Alexcostariha

#8
 Мне и так всё нравится. Терминал и оболочка Bash  и в Windows есть.
Чтобы оcтаваться внутри LibreOffice видимо нужен макрос с теми же задачами, что и в скрипте.
*Числовой формат дат в ячейках виден при открытии документа в Calligra от KDE .