Диаграммы — OOo basic: как отображать проценты в круговой диаграмме

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

https://docs.microsoft.com/en-us/sql/reporting-services/report-design/display-percentage-values-on-a-pie-chart-report-builder-and-ssrs

Вот мой воспроизводимый код:

мои данные:

https://i.stack.imgur.com/hwdDz.png

И макрос:

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

Большое спасибо за вашу помощь! Я нахожу документацию для OOo basic очень сложной для понимания и довольно бедной.


person Xavier    schedule 06.10.2017    source источник


Ответы (1)


Начиная с https://forum.openoffice.org/en/forum/viewtopic.php?t=44377, в конце концов я придумал этот код, который делает то, что вам нужно.

rowProps = oChart.Diagram.getDataRowProperties(0)
rowProps.DataCaption = com.sun.star.chart.ChartDataCaption.PERCENT
Dim oLocale As New com.sun.star.lang.Locale
rowProps.PercentageNumberFormat = ThisComponent.getNumberFormats().queryKey(_
   "0%", oLocale, True)

Документацию по числовым форматам можно найти по адресу https://wiki.openoffice.org/wiki/Documentation/DevGuide/OfficeDev/Managing_Number_Formats. Многие общие задачи в Basic довольно хорошо документированы, но то, что вы делаете, несколько необычно, поэтому документация довольно неясна.

Не стесняйтесь обращаться за помощью - ваши вопросы были хорошо написаны. С практикой работа с UNO API становится проще.

person Jim K    schedule 06.10.2017
comment
Благодарю вас! Это то что мне нужно! - person Xavier; 08.10.2017