Как посмотреть существует ли ячейка или нет?

Автор tagezi, 21 июля 2016, 15:33

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

tagezi

Как посмотреть существует ли ячейка или нет? Даже так не помогает:
sub test
oDoc = ThisComponent
if(oDoc.getSheets().getCellRangesByName("$'Cash flow'.$A$1048577") < 0) Then
MsgBox "Нет"
else
MsgBox "Есть"
end If
end sub


Появляется исключение:
ЦитироватьОшибка времени выполнения BASIC.
Вызвано исключение
Type: com.sun.star.lang.IndexOutOfBoundsException
Message:.
Хотя в документации написано что должна быть -1... по идее.
ЦитироватьThis exception is thrown to indicate that a container has been accessed with an illegal index.
The index is either negative or greater than or equal to the count of the elements.
Обработать IsError (Переменная) тоже не выходит.

Что с этим сделать ума пока не приложу.
Кто-нибудь сталкивался?
(x86_64) Kubuntu 16.04.3 - LibreOffice 6.0.2 / 6.1 alpha

rami

Для начала давай исправим ошибки в строке:if(oDoc.getSheets().getCellRangesByName("$'Cash flow'.$A$1048577") < 0) Then
1. после oDoc.getSheets() нужно указать индекс листа: oDoc.getSheets().getByIndex(0)
2. в getCellRangesByName убери лишнюю букву s
3. ты не можешь сравнивать объект oDoc.getSheets().getByIndex(0).getCellRangeByName("$'Лист1'.$A$1048576") с цифрой 0
Кстати, следующий номер ячейки не существует.

А теперь скажи что ты хотел?

tagezi

У меня есть ячейка, предположим по адресу "$'Cash flow'.$A$1", и я хочу просто проверить, существует ли она или нет.
(x86_64) Kubuntu 16.04.3 - LibreOffice 6.0.2 / 6.1 alpha

kompilainenn

Цитата: tagezi от 21 июля 2016, 16:42
У меня есть ячейка,... , и я хочу просто проверить, существует ли она или нет.

У тебя всё с логикой нормально? Ячейка если есть, то как её может не быть? Ячейка Шрёдингера?
Поддержать разработчиков LibreOffice можно тут, а наш форум вот тут

rami

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

tagezi

#5
Цитата: kompilainenn от 21 июля 2016, 13:48У тебя всё с логикой нормально? Ячейка если есть, то как её может не быть? Ячейка Шрёдингера?
Когда ты работаешь с документом и видишь его, естественно, ты знаешь есть ячейка или нет. Но когда ты сделал макрос, и не знаешь заранее где будет ячейка, которую указал пользоваетль, ты не знаешь, есть она или нет. Подробную историю про вразумительность пользователя и ячейки Шрёдингера можешь глянуть в этой теме http://forumooo.ru/index.php/topic,5725.0.html
То что сделал рами, как раз и показывает, что пользователь может делать всё что ему заблогарассыдиться, а не только что положено.
Так как имя листа изначально не известно, и что там написал пользователь тоже, то единственный способ просто посмотреть, есть ячейка или её нет.

Можно конечно дербанить ссылку на куски, и проверять есть ли лист, потом входит ли оно в диапазон, но как показала практика (см. в там же пляски) это не чуть не логичнее.
(x86_64) Kubuntu 16.04.3 - LibreOffice 6.0.2 / 6.1 alpha

rami

Есть два варианта:
1. адрес выбирается вручную курсором, как у тебя, — в этом случае ошибки быть не может
2. пользователь пишет адрес от "балды" — "три квартала от базара, спросить Балду" — тут нужно обрабатывать ошибки

tagezi

Цитата: rami от 21 июля 2016, 14:19Есть два варианта:
1. адрес выбирается вручную курсором, как у тебя, — в этом случае ошибки быть не может
2. пользователь пишет адрес от "балды" — "три квартала от базара, спросить Балду" — тут нужно обрабатывать ошибки
А метода по типу hasByName нет?
Я вижу что он есть для листов, объектов и иминованых диапазонов, но с ячейкми их не сделали что ли?
(x86_64) Kubuntu 16.04.3 - LibreOffice 6.0.2 / 6.1 alpha

rami

Цитата: tagezi от 21 июля 2016, 17:25А метода по типу hasByName нет?
Нет такой буквы ;D

Сделай обработчик ошибок, тогда пользователь получит сообщение "Введён неправильный адрес ячейки"

kompilainenn

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

tagezi

Цитата: kompilainenn от 21 июля 2016, 20:03
Цитата: rami от 21 июля 2016, 17:52Сделай обработчик ошибок,
скажи ему это еще раз
Да оно мне до сих пор мозг взрывает, в некоторых местах кастылями и инвалидными колясками приходиться писать...
И что-то мне не нравятся обработчики ошибок...
Попробую ещу подумать, может что нарою... или реализовать нормальный парсер всей этой беды.
(x86_64) Kubuntu 16.04.3 - LibreOffice 6.0.2 / 6.1 alpha

rami

Цитата: tagezi от 21 июля 2016, 18:40Попробую ещу подумать, может что нарою... или реализовать нормальный парсер всей этой беды.
Самое хорошее что можно придумать, это выкинуть нафик "файл настроек" — большая часть проблем из-за него, к тому же информацию настроек можно хранить в элементах управления. И ещё добавить в диалог справочную информацию чтобы пользователь мог узнать для чего эта механизьма предназначена.

P.S. да, чуть не забыл, kompilainenn просил сказать тебе ещё раз про обработчик ошибок ;D