OOo Basic: PieChart, как изменить цвет графика

Я пишу макрос для создания круговой диаграммы в OpenOffice Basic, но не могу найти способ изменить цвет другой части круговой диаграммы.

Мы можем взять в качестве примера макрос этой темы: Макрос OpenOffice Calc для добавления круговой диаграммы

То есть мои данные:
введите здесь описание изображения

И мой код:

Sub Macro1

Dim oRange as Object
Dim oRangeAddress(1) As New com.sun.star.table.CellRangeAddress
Dim oRect As New com.sun.star.awt.Rectangle
Dim cTitle as String

oRange = thisComponent.getCurrentSelection.getRangeAddress
oSheets = ThisComponent.getSheets()
oSheet = oSheets.getByIndex(0)
oCharts = oSheet.Charts

oRect.Width = 10000
oRect.Height = 10000
oRect.X = 8000
oRect.Y = 1000

oRangeAddress(0).Sheet = oRange.Sheet
oRangeAddress(0).StartColumn = 0
oRangeAddress(0).StartRow = 0
oRangeAddress(0).EndColumn = 1
oRangeAddress(0).EndRow = 2

cTitle = "Test Results"
oCharts.addNewByName(cTitle,oRect,oRangeAddress(),TRUE, TRUE)
oChart = oCharts.getByName(cTitle).embeddedObject
oChart.Diagram = oChart.createInstance("com.sun.star.chart.PieDiagram")
oChart.HasMainTitle = True
oChart.Title.String = cTitle

End Sub

Как я могу получить зеленый цвет на моей диаграмме вместо синего, например?

Спасибо за помощь.


person Xavier    schedule 20.09.2017    source источник
comment
Покажите какой-нибудь код, пожалуйста. И вы можете выполнить поиск на базовой круговой диаграмме openoffice разных цветов. Если это не поможет, нам нужно будет узнать, почему ни один из этих методов не сработал.   -  person    schedule 20.09.2017
comment
Обновлено с кодом. Я долго искал в Google, но ничего не нашел. У меня нет техник, чтобы попробовать, так как я не знаю названия метода.   -  person Xavier    schedule 20.09.2017
comment
Вау, документы OpenOffice ужасны. Начните с исследования свойства FillColor на различных объектах.   -  person    schedule 20.09.2017


Ответы (1)


Вот одно из решений.

Sub Macro1
    ...
    oFirstDiagram = oChart.getFirstDiagram()
    oColorScheme = CreateUnoListener("XColorScheme_", "com.sun.star.chart2.XColorScheme")
    oFirstDiagram.setDefaultColorScheme(oColorScheme)
End Sub

Function XColorScheme_getColorByIndex(index As Integer) As Long
    Dim result As Long
    result = &H0000FF  ' blue
    If index = 0 Then
        result = &H00FF00  ' green
    ElseIf index = 1 Then
        result = &HFFFF00  ' yellow
    End If
    XColorScheme_getColorByIndex = result
End Function

Единственная соответствующая документация, которую я смог найти для этого подхода, — это документы API: https://www.openoffice.org/api/docs/common/ref/com/sun/star/chart2/XDiagram.html.

Другой способ — поместить цвета в столбец C.

Status      Count   Color
Unfinished  20      =COLOR(0,255,0)
Finished    30      =COLOR(255,0,0)

Затем установите Диапазон для цвета заливки, чтобы использовать столбец C. Если вы хотите увидеть код для этого второго подхода, опубликуйте комментарий, и я рассмотрю его.

Еще один способ — с https://forum.openoffice.org/en/forum/viewtopic.php?t=36001.

oChart.Diagram.DataRowSource = com.sun.star.chart.ChartDataRowSource.COLUMNS
oChart.FirstDiagram.CoordinateSystems(0).ChartTypes(0).DataSeries(0).Color = &H00FF00

Однако этот последний подход не изменил цвет, когда я его попробовал.

person Jim K    schedule 20.09.2017
comment
Большое спасибо! Первый подход делает именно то, что я хочу! - person Xavier; 25.09.2017