ich habe jetzt ein paar Stunden gesucht, Debuggt und Rumprobiert aber finde keine Lösung zu folgendem Problem:
Ich erzeuge ein Diagramms , den Code dazu poste ich weiter unten, weil ich denke, der ist grösstenteil irrelevant. Dann möchte ich die genaue Position des Diagramms auslesen und ein Rectangle dartunter plazieren.
Top und heigth sollen identisch sein, die Breite nicht, daher ist diese fest angegeben ABER das Diagramm gibt mir für Left Z.B. 374 zurück und damit das Rectangel ungefähr darunter sitzt muss ich z.B. für left
etwa 18.000 angeben. Liegt es daran, dass das Chart über das Worksheet objekt erzeugt wird und das Rectangle über Page zugewiesen wird? Gibt es irgendwo eine Umrechnung? Ich habe diverses versucht, von Position
des Diagramms bis calculateDiagramPositionExcludingAxes, die Werte die ich für left, top und heigh bekomme sind zum erzeugen der Rectangel Abmessungen nicht zu gebrauchen.
Lesen der Diagramms Position und erzeugen des Rectangle:
Code: Alles auswählen
Dim Doc As Object
Dim Page As Object
Dim RectangleShape As Object
Dim Point As New com.sun.star.awt.Point
Dim Size As New com.sun.star.awt.Size
Dim Gradient As New com.sun.star.awt.Gradient
point = oDiagram.getPosition
size = oDiagram.size
rect = chart.Diagram.calculateDiagramPositionExcludingAxes
Point.x = 18610
Point.y = 16030
Size.Width = 10260
'Size.Height = diagrammHoehe - 503
Doc = ThisComponent
Page = Doc.DrawPages(indexWsBericht)
RectangleShape = Doc.createInstance("com.sun.star.drawing.RectangleShape")
RectangleShape.Size = Size
RectangleShape.Position = Point
Gradient.Style = com.sun.star.awt.GradientStyle.LINEAR
Gradient.StartColor = RGB(255,254,253)'RGB(220,255,220)
Gradient.EndColor = RGB(215,242,196)
Gradient.StartIntensity = 150
Gradient.EndIntensity = 150
Gradient.Angle = 900
Gradient.StepCount = 100
RectangleShape.FillStyle = com.sun.star.drawing.FillStyle.GRADIENT
'RectangleShape.FillGradient = Gradient
RectangleShape.zorder = 0
page.add(RectangleShape)
Erzeugen des Diagramms:
Dim wsBericht As Worksheet
Dim letzteDatenzeilePivot As Long
Dim letzteDatenspaltePivot As Long
Dim startzeileBalken As Long
dim indexWsBericht as integer
Set zielWB = ThisWorkbook
Set wsBericht = zielWB.Worksheets("Bericht")
letzteDatenzeilePivot = Letzte_Zeile (wsBericht, 8, 21, 10000) - 1
letzteDatenspaltePivot = Letzte_Spalte (wsBericht, 21, 8, 1000) - 1
startzeileBalken = letzteDatenzeilePivot + 4
indexWsBericht = sheets("Bericht").Index - 1
Dim Charts As Object
Dim chart As Object
Dim oSheet As Object
Dim rect As new com.sun.star.awt.Rectangle
Dim rangeAddress(0) As new com.sun.star.table.CellRangeAddress
Dim Farbe(0 to 9) as String
Dim isp as Integer
Dim isp2 as Integer
'Hier werden die 10 Farben für die Datenreihen angegeben
Farbe(0) = rgb(53,101,52)
Farbe(1) = rgb(255,211,32)
Farbe(2) = rgb(0,69,134)
Farbe(3) = rgb(255,128,128)
Farbe(4) = rgb(0,153,153)
Farbe(5) = rgb(70,25,0)
Farbe(6) = rgb(225,242,196)'rgb(215,242,196)
Farbe(7) = rgb(126,0,33)
Farbe(8) = rgb(102,102,153)
Farbe(9) = rgb(255,153,0)
'Flexible Höhe, je nachdem wie viele Daten und Mitarbeiter vorhanden
dim anzahlDaten as integer
dim anzahlMA as integer
dim diagrammHoehe as long
anzahlDaten = letzteDatenzeilePivot - 21
anzahlMA = letzteDatenspaltePivot - 8
diagrammHoehe = anzahlDaten * anzahlMA * 900 'xyx testen ob 900 passender wert
oSheet = thiscomponent.Sheets.getByName("Bericht")
'oSheet = ThisComponent.Sheets(3)
Set Charts = oSheet.getCharts
rect.x = 17050
rect.Y = 15000
rect.Width = 20000 'xyx passende BReite??????
rect.Height = diagrammHoehe
rangeAddress(0).Sheet = indexWsBericht
rangeAddress(0).StartColumn = 7
rangeAddress(0).StartRow = 20
rangeAddress(0).EndColumn = letzteDatenspaltePivot - 1
rangeAddress(0).EndRow = letzteDatenzeilePivot - 1
oSheet.Charts.addNewByName("LineChart", rect, rangeAddress(), True, True)
chart = Charts.getByName("LineChart").EmbeddedObject
chart.Diagram.Vertical = True
Chart.Diagram.DataRowSource = com.sun.star.chart.ChartDataRowSource.COLUMNS
dim oDiagram
oDiagram = chart.Diagram
Chart.Area.FillTransparence = 100
'Y-Achse (umgedreht)
Chart.Diagram.XAxis.ReverseDirection = true
'X-Achse (umgedreht)
Chart.Diagram.YAxis.Min = 0
Chart.Diagram.YAxis.Max = 12
'dim sdffd
'sdffd = chart.diagram.wall.getDiagramType '= com.sun.star.drawing.XShape.XDiagram.getDiagramType
'com.sun.star.drawing.XShape.XDiagram.getDiagramType
'owall= Chart.Diagram.getwall
'owallposition = owall.getposition
'Farben zuordnen
For isp2 = 0 to 9
'wenn alle Datenreihen gefärbt farbenende:
on error goto farbenende
dim oDataRow
oDataRow = oDiagram.getDataRowProperties(isp2)
oDataRow.FillStyle = 1
oDataRow.FillColor = Farbe(isp2)
next isp2
farbenende:
Ich bin für jede Hilfe sehr dankbar.
Moderation:
- Thema von OOo Calc nach OOo Basic und Java verschoben, wo alle Themen zur Basic-Programmierung hingehören.
- Zur Darstellung von Programmcode sind in der Forums-Software die [code]…[/code] Tags vorgesehen. Diese habe ich für dich gesetzt.