Изменение цвета фона ячейки в LibreOffice

Я использую LibreOffice 3.5.4.2. Я хотел бы изменить цвет фона ячеек в зависимости от различных условий. В качестве минимального примера я определил следующий макрос / функцию:

function bgcolor()
Dim Doc As Object
Dim Sheet As Object
Dim Cell As Object   

Doc = ThisComponent
Sheet = Doc.Sheets(1)

Cell = Sheet.getCellByPosition(0, 0)
REM Cell.CellBackColor = RGB(50,60,70)
bgcolor=Cell.CellBackColor
end function

Я выполняю функцию, вводя =BGCOLOR() в ячейку. Ячейка, в которой присутствует эта формула, возвращает значение цвета первой ячейки (0,0) или A1 на листе 1, как и ожидалось.

Однако я не могу заставить функцию изменить цвет фона ячейки A1. Цвет фона ячейки не меняется, когда я удаляю строку REM в приведенном выше примере, чтобы установить цвет фона.

Как установить цвет фона ячейки с помощью функции в LibreOffice?

(Я читал об использовании «стилей», но не стал рассматривать это дальше, потому что мне нужно установить много разных цветов фона, и я не хотел создавать много разных стилей. Можно вручную изменить цвет фона без использования стилей, поэтому я думал, что можно будет сделать то же самое программно.)


person SabreWolfy    schedule 23.08.2012    source источник
comment
У меня такая же проблема: я установил CellBackColor для ячейки, но на листе ничего не происходит. Вы в конце концов решили свою проблему? Любые идеи?   -  person Campa    schedule 20.02.2015


Ответы (3)


Во-первых, с вашим макросом в целом все в порядке. Одна строка для установки CellBackColor верна, как указано. Проблема в том, что функция вызывается из листа, который вы пытаетесь изменить. Функция не может изменять лист, из которого она вызывается. Итак, если вы вызовете свою функцию с листа 1, а затем попытаетесь изменить цвет фона ячейки на листе 1, это не удастся. Если, однако, вы попытались изменить цвет фона ячейки на листе 0 при вызове с листа 1, это будет работать должным образом.

person Andrew    schedule 29.10.2015

линия должна быть

cell.cellbackcolor = RGB(50,60,70) 

(там, конечно, нет "REM", это создает просто закомментированную строку)

также считайте, что параметр листов равен 0 вместо 1, если у вас только один лист

для получения информации о других интересных свойствах см. свойства ячеек < / а>

person Micky    schedule 18.10.2015

Cell.BackColor = RGB(50,60,70) should do the trick

изменить: это работает только в lowriter. Спасибо, Кампа.

person bdongus    schedule 23.12.2012
comment
Я не уверен, предлагаете ли вы заменить строку REM в моем примере своей строкой или ваша строка является отдельным примером. Я пробовал оба подхода, но это не решило проблему. Если я заменю строку в моем примере на вашу, ячейка вернет -1. - person SabreWolfy; 04.01.2013
comment
Предложил заменить строку REM. Но я не знаю, что редактировал Конрад. Может быть, не читается. Подойдет какая-то странная логика в LO. :) api.libreoffice.org/ документы / common / ref / com / sun / star / table / - person bdongus; 28.01.2013
comment
Проверил свой макрос для таблиц в lowriter. Должен работать и в localc. `For nRow = 0 To oTable.getRows (). GetCount () - 2 с oTable.getrows (). GetByIndex (nRow) Если nRow MOD 2 = 1 Тогда .BackColor = -1 Else .BackColor = RGB (192, 192, 192) End If end with ... Next` - person bdongus; 28.01.2013
comment
@bdongus: Предлагаемое вами решение дает BASIC Runtime error. Object variable not set ОШИБКУ. - person Campa; 20.02.2015
comment
@Campa: Не могли бы вы опубликовать свой код? В противном случае я могу только догадываться: вы использовали цикл без настройки oTable? - person bdongus; 21.02.2015
comment
@bdongus Привет: я просто получаю свою ячейку с помощью функции Sheet.getCellByPosition, я не использую объекты таблицы. Тогда myCell.CellBackColor = RGB(255, 0, 0). Я имею в виду, именно так, как это сделал SabreWolfy. - person Campa; 23.02.2015
comment
@Campa: какой объект не определен. Если это CellBackColor, возможно, в calc. Если нет, возможно, это поможет: ссылка - person bdongus; 25.02.2015
comment
@bdongus: нет, мой предыдущий комментарий относится к вашему утверждению Cell.BackColor, которое вы должны исправить в своем ответе на Cell.CellBackColor, если это опечатка. В моем случае все компилируется нормально, но на листе просто ничего не происходит (в точности как в случае с @ SabreWolfy). Использование .CurrentSelection, как в ссылке, которую вы мне дали, бросает com.sun.star.lang.IndexOutOfBoundsException на getCellByPosition. - person Campa; 26.02.2015