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

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

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

Войти
Новости: Вы можете задать вопрос по LibreOffice или Apache OpenOffice без регистрации, используя форму
 
   Начало   Помощь Поиск Войти Регистрация    задать вопрос  
Страниц: 1   Вниз
  Печать  
Автор Тема: #Err! (?): regex + фильтр + Basic  (Прочитано 804 раз)
0 Пользователей и 1 Гость смотрят эту тему.
eeigor
Форумчанин
***
Online Online

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



« Стартовое сообщение: 5 Февраль 2021, 13:32 »

Скорее, вопрос или мысли вслух… Пример тогда позднее, но высказывания приветствуются.

Обнаружил очень «тонкую» ошибку.

Ввожу в диапазон условий расширенного фильтра в соответствующее поле значение условия, а именно: 01
Накладываю фильтр в коде (но там и кода-то нет: ссылка на диапазон условий…) – выдаёт все строки, что в примере ниже с 1-й по 13-ю. А расширенный фильтр, установленный вручную, или функция REGEX работают верно: только строка 1.

Проблема с ведущим нулём, что ли? Тип данных: Текст.
На скриншоте видно, что свойство IsNumeric = True. У меня берётся, стало быть, NumericValue, а надо StringValue.
В результате ввожу условие так: .01

В остальных случаях всё работает правильно.
Что бы это значило?

А в коде смотреть нечего. Если коротко:
oDescriptor.FilterFields = oCriteriaRange.createFilterDescriptorByObject(oDBRange.ReferredCells).FilterFields

Тест REGEX:
     A      B      C
 1  Д01  01     '=REGEX(A1;"01")
 2  Д10  #N/A
 3  Д11  #N/A
 4  Д12  #N/A
 5  Д13  #N/A
 6  Д14  #N/A
 7  Д15  #N/A
 8  Д16  #N/A
 9  Д17  #N/A
10 Д18  #N/A
11 Д19  #N/A
12 Д21  #N/A
13 Д31  #N/A

Upd1:
Пример прикреплён в ответе #5.
 


* C452136C-A484-4EEF-A85A-35C020AD08AF.png (19.93 Кб, 642x357 - просмотрено 12 раз.)
« Последнее редактирование: 7 Февраль 2021, 00:08 от eeigor » Записан

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

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



« Ответ #1: 5 Февраль 2021, 14:59 »

Уточняю:
oFields = oCriteriaRange.createFilterDescriptorByObject(oDBRange.ReferredCells).FilterFields

oDescriptor.FilterFields = oFields

@sokol92, присвоение выше производится не напрямую, а через копирование структур, вы понимаете (об этом с вами говорили), так вот объект oFields содержит правильные данные, но в ходе присвоение выше "01" заменяется на "1".

Что делать? Это баг?
Я ведь "загоняю" весь диапазон условий разом и не работаю с полями индивидуально…

Upd1:
Ошибка локализована.
1. Работает правильно:
oFields = oCriteriaRange.createFilterDescriptorByObject(oDBRange.ReferredCells).FilterFields
2. Работает неправильно:
oDescriptor.FilterFields = oFields

При копировании структур, равно как и при присвоении напрямую (как оказалось, тоже можно), теряется "ведущий нолик.

Свойство StringValue получает значение "1".

Но справа он есть, а слева его уже нет.
oDBRange.FilterDescriptor.FilterFields = oCriteriaRange.createFilterDescriptorByObject(oDBRange.ReferredCells).FilterFields
« Последнее редактирование: 5 Февраль 2021, 15:44 от eeigor » Записан

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

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



« Ответ #2: 5 Февраль 2021, 15:41 »

Можно ли скопировать поля фильтра выше самостоятельно, одно за другим?

Upd1:
И так не выходит (в цикле):

oDescriptor.FilterFields(i).StringValue = oFields(i).StringValue

Upd2:
При замене DatabaseRange на именованный диапазон (метод Refresh на Filter) проблема осталась. Странно, однако…
« Последнее редактирование: 5 Февраль 2021, 16:09 от eeigor » Записан

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

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


WWW
« Ответ #3: 5 Февраль 2021, 16:11 »

Добрый день, @eeigor! Не могли бы Вы выложить файл с примером "странного" макроса?
Записан

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

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



« Ответ #4: 5 Февраль 2021, 16:14 »

Владимир, позднее. На работе интернета нет. Работаю с телефоном как могу. При первой возможности. Для меня это активный момент: использую каждый день.
Записан

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

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



« Ответ #5: 6 Февраль 2021, 22:23 »

Уважаемые форумчане, посмотрите мой пример. Всё описано и готово к размещению багрепорта.
Прошу высказаться и дать свои предложения по изоляции ошибок. Ошибок сразу две.

@kompilainenn, я могу вас попросить опубликовать багрепорт?

Разместил на forum.openoffice
@Villeroy said: "Очевидно, они сломали то, что работало в старых версиях. Так что это может быть даже отмечено как регресс. Независимо от того, сколько макрокода вы добавляете в электронную таблицу, вы никогда не получите электронную таблицу, которая работает так же плавно, как худшая база данных (которой, без сомнения, является Base)".

Я только смотрю в сторону Base. В MS Access работал профессионально.

* AdvancedFilter-test.ods (312.28 Кб - загружено 3 раз.)
« Последнее редактирование: 6 Февраль 2021, 23:54 от eeigor » Записан

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

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



« Ответ #6: 6 Февраль 2021, 23:23 »

@compilainenn, я могу вас попросить опубликовать багрепорт?
Можете, если первую букву моего ника поправите в своем посте.
Всё описано и готово к размещению багрепорта.
Но лучше бы вы это сделали сами, я в Basic ни бум бум, чтобы описать корректно проблему. Другое дело, если будет файл-пример и описание типа: "В А1 должно быть 1, а показывает 0", тогда втупую можно было бы поискать регрессию и найти виновного (если это регрессия)
Записан

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

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



« Ответ #7: 7 Февраль 2021, 00:00 »

Другое дело, если будет файл-пример
Пример достаточно "убедительный": минимум данных, максимум удобства (вызов макросов гиперрссылкой прямо на листе). Внизу на листе в примере результат фильтра вручную (справа показаны все установки на скриншоте, надо только повторить, чтобы убедиться). Здесь всё правильно (ОК!). А вверху видим, что не фильтрует (BAD!), но если вместо условия "01" ввести ".01" или ".*01", то работает правильно. Более того, все ошибки локализованы. Язык: английский/русский.
« Последнее редактирование: 7 Февраль 2021, 00:03 от eeigor » Записан

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

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



« Ответ #8: 23 Февраль 2021, 10:49 »

Сподобился...
https://bugs.documentfoundation.org/show_bug.cgi?id=140613
« Последнее редактирование: 23 Февраль 2021, 10:52 от eeigor » Записан

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

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



« Ответ #9: 23 Февраль 2021, 11:22 »

всегда давайте инфо о Лбре из диалога "О программе", без этого трудно понять, с каких версий начинать искать проблему
Записан

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

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