Diagramm und Rectangle per Basic an gleiche Position

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

KarstenDDorf
Beiträge: 1
Registriert: Mo, 24.03.2014 14:43

Diagramm und Rectangle per Basic an gleiche Position

Beitrag von KarstenDDorf »

Hallo Forum,
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:

  1. Thema von OOo Calc nach OOo Basic und Java verschoben, wo alle Themen zur Basic-Programmierung hingehören.
  2. Zur Darstellung von Programmcode sind in der Forums-Software die [​code]…[​/code] Tags vorgesehen. Diese habe ich für dich gesetzt.
lorbass, Moderator[/color]
Zuletzt geändert von KarstenDDorf am Di, 25.03.2014 14:23, insgesamt 1-mal geändert.
Eddy
********
Beiträge: 2781
Registriert: So, 02.10.2005 10:14

Re: Diagramm und Rectangle per Basic an gleiche Position

Beitrag von Eddy »

Hallo KarstenDDorf,
KarstenDDorf hat geschrieben: Ich bin für jede Hilfe sehr dankbar.
schön. Dann poste bitte im richtigen Unterforum. Für Fragen zur Programmierung haben wir extra OOo Basic und Java eingerichtet.
Antworten