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

Главная категория => Макросы => Тема начата: eeigor от 5 февраля 2021, 13:32

Название: #Err! (?): regex + фильтр + Basic
Отправлено: eeigor от 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.
Название: Re: #Err! (?): regex + фильтр + Basic
Отправлено: eeigor от 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
Название: Re: #Err! (?): regex + фильтр + Basic
Отправлено: eeigor от 5 февраля 2021, 15:41
Можно ли скопировать поля фильтра выше самостоятельно, одно за другим?

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

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

Upd2:
При замене DatabaseRange на именованный диапазон (метод Refresh на Filter) проблема осталась. Странно, однако...
Название: Re: #Err! (?): regex + фильтр + Basic
Отправлено: sokol92 от 5 февраля 2021, 16:11
Добрый день, @eeigor! Не могли бы Вы выложить файл с примером "странного" макроса?
Название: Re: #Err! (?): regex + фильтр + Basic
Отправлено: eeigor от 5 февраля 2021, 16:14
Владимир, позднее. На работе интернета нет. Работаю с телефоном как могу. При первой возможности. Для меня это активный момент: использую каждый день.
Название: Re: #Err! (?): regex + фильтр + Basic
Отправлено: eeigor от 6 февраля 2021, 22:23
Уважаемые форумчане, посмотрите мой пример. Всё описано и готово к размещению багрепорта.
Прошу высказаться и дать свои предложения по изоляции ошибок. Ошибок сразу две.

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

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

Я только смотрю в сторону Base. В MS Access работал профессионально.
Название: Re: #Err! (?): regex + фильтр + Basic
Отправлено: kompilainenn от 6 февраля 2021, 23:23
Цитата: eeigor от  6 февраля 2021, 22:23@compilainenn, я могу вас попросить опубликовать багрепорт?
Можете, если первую букву моего ника поправите в своем посте.
Цитата: eeigor от  6 февраля 2021, 22:23Всё описано и готово к размещению багрепорта.
Но лучше бы вы это сделали сами, я в Basic ни бум бум, чтобы описать корректно проблему. Другое дело, если будет файл-пример и описание типа: "В А1 должно быть 1, а показывает 0", тогда втупую можно было бы поискать регрессию и найти виновного (если это регрессия)
Название: Re: #Err! (?): regex + фильтр + Basic
Отправлено: eeigor от 7 февраля 2021, 00:00
Цитата: kompilainenn от  6 февраля 2021, 23:23Другое дело, если будет файл-пример
Пример достаточно "убедительный": минимум данных, максимум удобства (вызов макросов гиперрссылкой прямо на листе). Внизу на листе в примере результат фильтра вручную (справа показаны все установки на скриншоте, надо только повторить, чтобы убедиться). Здесь всё правильно (ОК!). А вверху видим, что не фильтрует (BAD!), но если вместо условия "01" ввести ".01" или ".*01", то работает правильно. Более того, все ошибки локализованы. Язык: английский/русский.
Название: Re: #Err! (?): regex + фильтр + Basic
Отправлено: eeigor от 23 февраля 2021, 10:49
Сподобился...
https://bugs.documentfoundation.org/show_bug.cgi?id=140613
Название: Re: #Err! (?): regex + фильтр + Basic
Отправлено: kompilainenn от 23 февраля 2021, 11:22
Цитата: eeigor от 23 февраля 2021, 10:49
Сподобился...
https://bugs.documentfoundation.org/show_bug.cgi?id=140613
всегда давайте инфо о Лбре из диалога "О программе", без этого трудно понять, с каких версий начинать искать проблему