Выпадающий список в ячейке без элементов управления

Автор Aspiring, 4 сентября 2014, 15:01

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

Aspiring

Добрый день уважаемые!

В calc есть такая замечательная вещь как Данные-Проверка-Список
Есть необходимость рализовать программное заполнение данного списка.
До есть есть набор данных получаемый из БД. Нужно чтобы пользователь имел возможность выбора из выпадающего списка этих данных.

Понимаю что можно выгрухить эти данные на скрытый лист и через Данные-Проверка-Диапазон ячеек.
Но все таки хотелось бы реализовать заполнение этого списка программно.
Как это сделать?

Удалось найти этот список xray'ем

Dim items As String
' Получить список из ячейки A1
items = ThisComponent.CurrentController.ActiveSheet.getCellByPosition(0,0).Validation.getFormula1()
' Добавить такой же список в соседнюю ячейку таким же образом не выходит
ThisComponent.CurrentController.ActiveSheet.getCellByPosition(1,0).Validation.setFormula1(items)


Нашел такую информацию:
Цитировать
If you happen to have a scripting language that is not capable of creating own components, such as StarBasic, then the validation mechanisms described in chapter Validation can not be used: They rely on a component being created that implements the XValidator interface.

Но увы на этом и все. подскажите в правильном ли направлении капаю?!
Может у кого нибудь есть более простой способ решения моей проблемы?!

Спасибо!

rami

Цитата: Aspiring от  4 сентября 2014, 14:01Может у кого нибудь есть более простой способ решения моей проблемы?!
Я не всё понял из вашего вопроса, для начала посмотрите это:Sub SetValidationRange
Dim oRange, oValidation
oRange=ThisComponent.CurrentController.ActiveSheet.getCellRangeByName("H2:H11")  'сюда вставляются списки
oValidation=oRange.Validation
oValidation.Type=com.sun.star.sheet.ValidationType.LIST
oValidation.setOperator(com.sun.star.sheet.ConditionOperator.EQUAL)
oValidation.setFormula1("$Лист1.$B$2:$B$9")     'отсюда берутся данные для списков
oRange.Validation=oValidation
End Sub

Aspiring

Ну от чего же не поняли... Поняли, только мне в список нужно данные не из диапазона ячеек брать. а свой внести, который получается из таблицы БД. Ваш код отработал на ура. Увидел что еще тип задается и оператор.
Попробую поэкспериментировать. Спасибо rami !

Aspiring

Итак. Вот процедура создающая ячейке выпадающий список из произвольных данных. В смысле не обязательно привязывать список к диапазону ячеек.
Sub SetValidationRange
Dim oRange, oValidation, sItems
sItems = CHR$(34) + "Список 1" + CHR$(34) + ";" +_
CHR$(34) + "Список 2" + CHR$(34) + ";" +_
CHR$(34) + "Список 3" + CHR$(34) + ";" +_
CHR$(34) + "Список 4" + CHR$(34) + ";" +_
CHR$(34) + "Список 5" + CHR$(34) + ";" +_
CHR$(34) + "Список 6" + CHR$(34) + ";"
oRange=ThisComponent.CurrentController.ActiveSheet.getCellRangeByName("B1")  'сюда вставляются списки
oValidation=oRange.Validation
oValidation.Type=com.sun.star.sheet.ValidationType.LIST
oValidation.setOperator(com.sun.star.sheet.ConditionOperator.EQUAL)
oValidation.setFormula1(sItems)     'отсюда берутся данные для списков
oRange.Validation=oValidation
End Sub

Всем спасибо! Вопрос решен.