Fórum pro uživatele kancelářského balíku OpenOffice | LibreOffice
 

#1 5. 11. 2010 10:54:46

rambojack
Člen
Registrace: 5. 11. 2010
Příspěvků: 2

Vytvoření a formátování grafu makrem

Zdravím,
vytvořit graf už se mi podařilo, dokonce i popisky ke "sloupcům" jsem k nim vložil, ale potřeboval bych je ještě makrem naformátovat, a nemůžu se dopátrat ničeho nic.

Moje makro:

Sub grafy

Dim Doc As Object
Dim Charts As Object
Dim Chart as Object
Dim Rect As New com.sun.star.awt.Rectangle
Dim RangeAddress(0) As New com.sun.star.table.CellRangeAddress
    Doc = ThisComponent
    Dim list_vystupni As Object
    list_vystupni = Doc.sheets.getByName("stat_likvidace") 

Dim jmeno(10) as String
Dim title(10) as string
Dim subtitle(10) as string
jmeno(0)= "graf0" 
jmeno(1)= "graf1" 
jmeno(2)= "graf2" 
jmeno(3)= "graf3" 
jmeno(4)= "graf4"

title(0)= "graf0" 
title(1)= "graf1" 
title(2)= "graf2" 
title(3)= "graf3" 
title(4)= "graf4"

subtitle(0)= "ggraf0" 
subtitle(1)= "ggraf1" 
subtitle(2)= "ggraf2" 
subtitle(3)= "ggraf3" 
subtitle(4)= "ggraf4"
  
Rect.X = 8000
Rect.Y = 1000
Rect.Width = 15000
Rect.Height = 15000
RangeAddress(0).Sheet = 4  rem TODO: nastavit byname
RangeAddress(0).StartColumn = 0 
RangeAddress(0).StartRow = 79
RangeAddress(0).EndColumn = 1
RangeAddress(0).EndRow = 85
 
dify = 20000
offset = 50

for i=0 to list_vystupni.getcellbyposition(3, 29).value  -1  rem v buňce je počet grafů

    Charts = Doc.Sheets(4).Charts  rem TODO: nastavit byname
     if Charts.HasByName(jmeno(i)) Then 
        Charts.RemoveByname(jmeno(i))
    end if    
    Charts.addNewByName(jmeno(i), Rect, RangeAddress(), True, True)
    Chart = Charts.getByName(jmeno(i)).EmbeddedObject
     Chart.Diagram = Chart.createInstance("com.sun.star.chart.PieDiagram")  rem nastavení typu grafu
    Chart.HasMainTitle = True
    Chart.Title.String = title(i)
    Chart.HasSubTitle = True
    Chart.Subtitle.String = subtitle(i)
    Chart.HasLegend = True 
    Chart.Legend.Alignment = com.sun.star.chart.ChartLegendPosition.BOTTOM
    Chart.Legend.FillStyle = com.sun.star.drawing.FillStyle.SOLID
    Chart.Legend.FillColor = RGB(210, 210, 210)
    Chart.Legend.CharHeight = 12
    Chart.diagram.xaxis.DisplayLabels = true
    Chart.diagram.yaxis.DisplayLabels = true
 rem    chart.diagram.setPropertyValue("DataCaption",7)  rem pokus
     chart.diagram.datacaption = com.sun.star.chart.ChartDataCaption.VALUE  rem ekvivalent předchozího řádku
     chart.diagram.datacaption = chart.diagram.datacaption + 
com.sun.star.chart.ChartDataCaption.PERCENT
 rem    chart.diagram.Datacaption("separator",0)  rem pokus
     chart.diagram.xaxis.charheight = 20
 rem    chart.diagram.datacaption.setPropertyvalue("charheight",12) rem pokus

    rem chart.diagram.DataCaption.setPropertyValue("charheight", 12)  rem pokus
    RangeAddress(0).StartRow = RangeAddress(0).StartRow +offset
    RangeAddress(0).EndRow = RangeAddress(0).EndRow +offset
    Rect.Y = Rect.Y + dify
next i

End Sub

Problém tkví, že se mi sice podařilo přidat popisky dat nastavením:
chart.diagram.setPropertyValue("DataCaption",7)
ale po vytvoření jsou tak malé, že je potřebuji makrem naformátovat.
Ručně to je: Dvojklik na graf, pravým ->Format Data labels, karta Data labels ->nastavit separator na "new line"
karta Font -> nastavit size na 12

Nejsem stavu dohledat to v dokumentaci zde: http://wiki.services.openoffice.org/wik … _of_Charts
ani zde: http://api.openoffice.org/docs/common/r … le-ix.html

Díky za každou radu.

Offline

#2 9. 11. 2010 09:10:00

rambojack
Člen
Registrace: 5. 11. 2010
Příspěvků: 2

Re: Vytvoření a formátování grafu makrem

Odpovím si sám..

    Chart.Diagram = Chart.createInstance("com.sun.star.chart.PieDiagram")
    Set oDiagram = Chart.getDiagram

    chart.diagram.setPropertyValue("DataCaption",7)

rem Možno pro každý popisek nastavit samostatně
rem    for j=0 to list_vystupni.getcellbyposition(1, 29).value  -1  rem počet přípravků
rem         Set aPointProp = oDiagram.getDataPointProperties(j, 0)  rem nastavení každého popisku zvlášť
rem        aPointProp.CharHeight=12
rem        aPointProp.Separator = "\n"
rem    next j    
       
rem nebo takhle pro celý řádek dat                 
                Set aPointProp = oDiagram.getDataRowProperties(0) 
        aPointProp.CharHeight=10 rem velikost fontu
        aPointProp.labelseparator = Chr(10) rem enter jako Delimiter
    rem    Set aPointProp = oDiagram.getDataPointProperties(7, 0)
    rem    aPointProp.SegmentOffset = 50  rem srpek koláče vytažen ven

Offline

Zápatí