создать элемент управления

Автор rmnpop66, 3 февраля 2014, 09:52

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

rmnpop66

Помогите, пожалуйста, кто знает. Требуется написать макрос, создающий в электронной таблице Calc элемент управления "список", привязанный к ячейке. Не могу: 1)установить привязку к ячейке - нашел только свойство Anchor в com.sun.star.sheet.shape, но оно readonly. 2)назначить связанную ячейку и сказать, чтоб хранила номер выбранного элемента в списке (то что вручную делается в свойствах элемента управления, вкладка "данные") - вообще ничего похожего не нашел. Заранее благодарен.

JohnSUN

Добро пожаловать на форум!

Anchor - привязка элемента управления (к листу целиком или к конкретной ячейке) - только поведение контрола при изменении размера колонки/строки: оставаться на месте или переползать следом за верхним левым углом "своей" ячейки.

А привязка данных делается так:
Связанная ячейка - oControl.getValueBinding().BoundCell - CellAddress структура из трех целых чисел - лист, колонка и строка
Исходный диапазон ячеек - oControl.getListEntrySource().CellRange - CellRangeAddress структура из пяти целых чисел - лист, левая/правая колонки и верхняя/нижние строки диапазона

Поставь себе расширение MRI - эти названия я отыскал с его помощью буквально за три минуты.
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

rmnpop66

Цитата: JohnSUN от  3 февраля 2014, 11:59Anchor - привязка элемента управления (к листу целиком или к конкретной ячейке) - только поведение контрола при изменении размера колонки/строки

Да, я спрашивал и о привязке и о связанной ячейке. Нужно и то, и то. Список должен быть виден в определенной ячейке, и при ее перемещении соответственно перемещаться. За getValueBinding огромное спасибо - буду знать, где копаться. MRI есть для LibreOffice?

JohnSUN

Цитата: rmnpop66 от  3 февраля 2014, 17:50MRI есть для LibreOffice?
Вообще-то есть, но там его выкладывают с небольшим опозданием.  Это не страшно, офисы настолько мало различаются, что MRI прекрасно работает под любым из них (вот только что проверил под LibreOffice 4.2.0.4 - работает)
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

JohnSUN

Ах да, чуть не забыл! Попытки программно ткнуть носом ListBox в номер выбранного элемента обречены, нет в API доступа к этому свойству. Поэтому народ обычно берет значение и обрабатывает его MATCH'ем или VLOOKUP'ом. См. здесь
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

rmnpop66

Спасибо за участие к моей проблеме. Прошу прощения, что не описал задачу подробнее. Надо сделать некий расчет. Для полусотни входных параметров и десятка выходных нужен выбор единиц измерения. Хочется, чтобы для каждого такого параметра список выбора единиц измерения и формулы пересчета в Си или обратно добавлял макрос. Основные расчетные формулы будут потом вводиться вручную. Данные тоже вручную, так что программный доступ к контролу пока не актуален.
Цитата: JohnSUN от  3 февраля 2014, 11:59Связанная ячейка - oControl.getValueBinding().BoundCell
Здесь печаль. BoundCell только для чтения. Метод setValueBinding, как я понял, предназначен для установки ЗНАЧЕНИЯ связанной ячейки. И не более того.
Цитата: JohnSUN от  3 февраля 2014, 18:32Попытки программно ткнуть носом ListBox в номер выбранного элемента обречены
Не совсем понял. Надо получить выбранный элемент по его номеру? Или номер выбранного элемента? Или что-то другое? Туплю вечером.

rmnpop66

Цитата: JohnSUN от  3 февраля 2014, 18:32Попытки программно ткнуть носом ListBox в номер выбранного элемента обречены
А, кажется понял (действительно тупил!). В тексте макроса по Вашей ссылке пытаются установить выбранный элемент списка. У меня были какие-то подозрения, что напрямую нельзя, потому что иначе вся эта канитель с изменением выбранного элемента при установке значения связанной ячейки не имеет особого смысла. Получается, что основной способ программно выбрать элемент списка - setValueBinding? И держать в голове то, что выбранный элемент списка изменится не сразу, а только после того, как изменение связанной ячейки поймает обработчик? Как-то не по фэн-шую. Спасибо за ссылку, обязательно посмотрю как делает народ, сейчас со временем большие проблемы.