[erl]Erstellen eines Balkendiagramm in OOo 3.3.0 problemati

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

Moderator: Moderatoren

Benutzeravatar
balu
********
Beiträge: 3812
Registriert: Fr, 24.08.2007 00:28
Wohnort: Warstein

[erl]Erstellen eines Balkendiagramm in OOo 3.3.0 problemati

Beitrag von balu »

Hallo Liebe Gemeinde,

ich weiß das der Betreff fast nichts sagend ist, und ihr vielleicht deswegen mit dem Kopf schüttelt, aber anders kann ich es nicht in Kurzform fassen.

Also folgende Situation.
Ich erstelle per Makro in OOo 3.2.1 ein Gestapeltes Balkendiagramm. Das funktioniert gut, und ich bin mit dem Ergebniss sehr zufrieden.

Nehme ich die gleiche Datei und führe das Makro in OOo 3.3.0 aus, dann bekomme ich wohl auch eins zu sehen, aber das ist nicht identisch mit dem in 3.2.1. Von den andersfarbig dargestellten Farbbalken mal abgesehen, die im moment keine primäre Rolle spielen.


Und was ist so anders das ich mich an euch wende?
  • Die Beschriftung der Y-Achse, die Horizontal verläuft, liegt gegenüber OOo 3.2.1 um 0,96 cm tiefer. OOo 3.2.1 Y=0,275 cm - OOo 3.3.0 Y=1,235 cm
  • Die Namen auf der X-Achse, die Vertikal verläuft, werden nicht vollständig angezeigt. Es wird nur jeder zweite Name angezeigt.
Hier 2 einfache Screenshots dazu.
Soll-Diagramm_0.png
Soll-Diagramm_0.png (84.12 KiB) 1583 mal betrachtet
So_nicht_0.png
So_nicht_0.png (47.13 KiB) 1583 mal betrachtet
Falls jetzt jemand auf die Glorreiche kommt und mir empfiehlt XRAY einzusetzen um das problem genauer zu untersuchen, dem sei gesagt:
"Na dolle! Dadurch komme ich von einem großem Problem zum nächstem großem Problem!"
Und warum?
Na wenn ich am ende des Erstellungsmakro XRAY aufrufe, dann verflüchtigen sich auf einmal meine Probleme! Und alles ist so wie gewünscht :shock: ?

Bitte mal eine kleine Denkpause einlegen, und das eben gesagte auf sich wirken lassen.



Denkpause Ende.

Was läuft in meinem Makro verkehrt, das erst durch den Aufruf von XRAY die Darstellung des Diagramms fast so ist wie gewünscht (ohne das Farbbalkenproblem)?

Noch nicht verwirrt genug?
Na denn setz ich noch eins drauf!

Rufe ich XRAY im Makro per xray Chart auf, dann ist wie eben erwähnt die Darstellung OK.

Rufe ich aber XRAY im Makro per xray oDiagram auf, dann ist die Darstellung fast OK.

Ich habe mich natürlich bemüht mit XRAY herauszufinden wo dran das liegt. Ich habe auch mit dem DifferenceChecker von DPunch, mit WinMerge und auch selber in Mühseeliger Kleinarbeit (die Properties selber tabellarisch aufbereitet) versucht herauszufinden wo der Fehler liegt. Aber entweder suche ich mal wieder verkehrt, oder aber ich übersehe da ne *Kleinigkeit* die mir die Wurzel allen Übels zeigt.

Natürlich habe ich ne kleine Beispieldatei angehängt, mit der ihr hoffentlich mein Problem nachvollziehen könnt. Einfach im Blatt1 auf dem Grünen Button klicken und in ruhe beobachten wie das Diagramm erstellt wird, oder aber im Blatt2 auf den Button klicken und nach ca. 1 Sekunde die Rückmeldung "Diagramm ist Fertig." lesen.

Ach ja! Ich hatte auch mit Chart.Diagram.Position.Y = 1500 versucht die Position der Y-Achse zu beeinflussen, was aber nicht funktionierte.


In OOo 3.3.0 gibts unter den Properties 3 Einträge die es in der 3.2.1 nicht gibt.

Code: Alles auswählen

DiagramPositionExcludingAxes
DiagramPositionIncludingAxes
DiagramPositionIncludingAxesAndAxisTitles
Ich glaub aber kaum das die was zu sagen haben.


Meine Fragen lauten:
Könnt ihr mir helfen das auch unter OOo 3.3.0 die Diagrammerstellung "Fehlerfrei" funktioniert?
Könnt ihr mir sagen warum durch den Aufruf von XRAY mit dem "richtigem" Objekt alles OK ist?

Ich freue mich wirklich auf eure Antworten. Und bedanke mich schon mal für eure Bemühungen, alleine nur fürs lesen.:D.



Gruß
balu
Dateianhänge
Gestapeltes_BalkenDiagramm_Horizontal_DEMO_wegen_OOo3.3.0.ods
(19.14 KiB) 86-mal heruntergeladen
Zuletzt geändert von balu am So, 29.01.2012 15:26, insgesamt 1-mal geändert.
Sei öfter mal ein Faultier, sag öfter mal "Ach was!" Dann kriegst du keinen Herzinfarkt, und hast ne menge Spass.

wehr rächtschraipfähler findet khan si behalden :D
Karolus
********
Beiträge: 7535
Registriert: Mo, 02.01.2006 19:48

Re: Erstellen eines Balkendiagramm in OOo 3.3.0 problematisc

Beitrag von Karolus »

Hallo
Momentan arbeite ich mit LO 3.3.3 (Suse) auf dem Laptop, und es gibt keine Probleme mit der Darstellung, vielleicht komme ich später nochmal zum testen auf dem Desktop mit anderen LO/OOo-versionen.

Gruß Karo
LO7.4.7.2 debian 12(bookworm) auf Raspberry5 8GB (ARM64)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)
Benutzeravatar
balu
********
Beiträge: 3812
Registriert: Fr, 24.08.2007 00:28
Wohnort: Warstein

Re: Erstellen eines Balkendiagramm in OOo 3.3.0 problematisc

Beitrag von balu »

Mahlzeit Karo,
Momentan arbeite ich mit LO 3.3.3 (Suse) auf dem Laptop, und es gibt keine Probleme mit der Darstellung
Danke für deinen Test.
Jedoch bleibt das bei LO nicht dabei. Denn bei den Versionen die ich habe, das sind die 3.4.0 und 3.4.4, bleibt durchgehend das Problem des nicht korrekt dargestellten Diagramm (siehe 2. Screenshot "so_nicht_0.png"). In diesen Versionen tritt so gar ein anderer Effekt auf, nämlich der, das XRAY die Darstellung nicht ändert (nachträglich beeinflusst). Unabhängig mit welchem schon genannten Objekt ich XRAY aufrufe.



Gruß
balu
Sei öfter mal ein Faultier, sag öfter mal "Ach was!" Dann kriegst du keinen Herzinfarkt, und hast ne menge Spass.

wehr rächtschraipfähler findet khan si behalden :D
Benutzeravatar
balu
********
Beiträge: 3812
Registriert: Fr, 24.08.2007 00:28
Wohnort: Warstein

Re: Erstellen eines Balkendiagramm in OOo 3.3.0 problematisc

Beitrag von balu »

Hallo Leute,

ich möcht noch ergänzendes zu meinem Eröffnungs-Beitrag berichten.

In meinem Hauptprojekt werden auch Diagramme erstellt, und zwar auf der Basis der obigen Beispieldatei. Jedoch geschieht das dort etwas anders. Denn da arbeite ich mit 2 Dateien. Eine ist die Erstellungsdatei (Startdatei), und die andere ist die Monatsdatei (Zieldatei).

Die Startdatei öffnet versteckt im Hintergrund (HIDDEN) die Zieldatei, überträgt ein paar Daten, erstellt die Diagramme, speichert die Zieldatei unter einem anderen Namen und schließt dann diese.

Das erstaunliche an der ganzen Sache in Bezug auf die Diagramme ist folgendes.
Es werden alle Namen auf der X-Achse angezeigt. Nur die Y-Achse mit den Zeiten ist tiefer als geplant. Die soll nämlich dort in den Tagesblättern oberhalb der fixierten Zeile zu sehen sein, was aber nicht der Fall ist da sie nun unter der fixierten Zeile ist. Und dadurch das die Zeitenzeile im Diagramm tiefer liegt als geplant, wird alles was IM Diagramm ist zusammengequetscht. Die vorgegebene Lageposition so wie die Größe des Diagramm sind korrekt.

Logisch das ich dort nicht XRAY einsetze. Und dennoch sieht das Ergebnis schon anders aus. Das Warum ist mir natürlich noch schleierhaft. Die technischen Unterschiede zu der obigen Beispieldatei sind wie folgt.
  • Es wird nicht ein Diagramm, sondern je nach Monat zwischen 28 und 31 in einer FOR-NEXT-Schleife erstellt.
  • Die Erstellungsprozedur steht nicht alleine in einem Modul, sondern sie ist in einer etwas Umfangreicheren SUB mittendrin eingebettet.
  • Nach der Erstellungsprozedur ist die SUB noch nicht beendet, da die versteckte Datei unter einem anderen Namen gespeichert und danach geschlossen wird.
Damit ihr das ganze zum testen nachvollziehen könnt, habe ich meine Hauptprojektdateien aufs nötigste reduziert und hier angehängt. Es folgt ein kurze Bedienungsanleitung.
  • Erst wird die Startdatei geöffnet. Dann klickt man auf den Button "Bitte hier klicken".
  • Nun auf den Button "Monatsdatei erstellen".
  • Jahr und Monat auswählen, und auf Weiter klicken.
  • Jetzt die Datei "ZIELDATEI_Demo_blanko.ods" auswählen.
  • Die nächsten Schritte sind eigentlich selbstklärend.
Die Erstellunngsprozedur für die Diagramme befindet sich in der "STARTDATEI_demo.ods" im Modul "Fertigstellen", irgendwo in der Mitte.

Und hier noch ein kleiner Screenshot wie es aussehen soll.
Diagramm-vorgabe.png
Diagramm-vorgabe.png (10.94 KiB) 1552 mal betrachtet
Ich hoffe das wir gemeinsam irgendwie des Rätsellösung näher kommen.



Gruß
balu
Dateianhänge
ZIELDATEI_Demo_blanko.ods
(26.38 KiB) 61-mal heruntergeladen
STARTDATEI_demo.ods
(29.37 KiB) 58-mal heruntergeladen
Sei öfter mal ein Faultier, sag öfter mal "Ach was!" Dann kriegst du keinen Herzinfarkt, und hast ne menge Spass.

wehr rächtschraipfähler findet khan si behalden :D
Benutzeravatar
balu
********
Beiträge: 3812
Registriert: Fr, 24.08.2007 00:28
Wohnort: Warstein

Re: Erstellen eines Balkendiagramm in OOo 3.3.0 problematisc

Beitrag von balu »

Aktueller Statusbericht.

Es ist alles viel komplizierter als ich dachte!

Ich weiß nicht ob man das überhaupt ändern, oder anpassen kann, aber mein Hauptproblem hier hat eine ganz andere Ursache als ich dachte.

In OOo 3.2.1 bezieht sich die Lage und Größe für das Diagramm auf die Zeichen/Buchstaben im Abstand zu den Kanten der Diagrammfläche.
Das heißt:
  • Die Y-Position ist der Abstand von der oberen Kante der Diagrammfläche zu der Oberkante des Zeichen/Buchstaben auf der Horizontalen Achse.
  • Die X-Position ist der Abstand von der linken Kante der Diagrammfläche zu der linken Kante des nahe liegenderen ersten Zeichen/Buchstaben auf der Senkrechten Achse.
Um das zu verdeutlichen hier ein Scrrenshot.
DiagrammPosition_OOo_3.2.1.png
DiagrammPosition_OOo_3.2.1.png (59.44 KiB) 1515 mal betrachtet
In OOo 3.3.0 ist das aber anders, denn da beziehen sich die Lage- und Größenangaben des Diagramm von den Kanten der Diagrammfläche zu der Diagrammwand.
Das heißt:
  • Die Y-Position ist der Abstand von der Oberkante der Diagrammfläche zu der Oberkante der Diagrammwand.
  • Die X-Position ist der Abstand von der linken Kante der Diagrammfläche zu der linken Kante der Diagrammwand.
Auch hierzu ein Screenshot.
DiagrammPosition_OOo_3.3.0.png
DiagrammPosition_OOo_3.3.0.png (58.33 KiB) 1515 mal betrachtet
Das dürften wohl in beiden Programmen die Standardeinstellungen der Bezugssysteme sein. Bei dem einen wird zum Buchstaben, und bei dem anderen zur Diagrammwand Bezug genommen. Und da bin ich mir nicht sicher ob ich bei dem erst genannten System etwas ändern kann. Denn ich hatte die beiden Dateien entzippt und mir die content.xml für das Diagramm mittels Winmerge vergleichen lassen. Und dabei ist mir folgender Unterschied aufgefallen.
Für OOo 3.2.1

Code: Alles auswählen

<chart:chart svg:width="35cm" svg:height="13.78cm" xlink:href=".." chart:class="chart:bar" chart:style-name="ch1">
    <chart:plot-area chart:style-name="ch2" table:cell-range-address="Blatt1.A4:Blatt1.K29" chart:data-source-has-labels="both" svg:x="0.7cm" svg:y="0.275cm" svg:width="33.6cm" svg:height="13.23cm">
für OOo 3.3.0

Code: Alles auswählen

<chart:chart svg:width="35cm" svg:height="13.78cm" xlink:href=".." xlink:type="simple" chart:class="chart:bar" chart:style-name="ch1">
    <chart:plot-area chart:style-name="ch2" table:cell-range-address="Blatt1.A4:Blatt1.K29" chart:data-source-has-labels="both" svg:x="0.7cm" svg:y="1.235cm" svg:width="32.9cm" svg:height="12.27cm">
     <chartooo:coordinate-region svg:x="2.591cm" svg:y="2.333cm" svg:width="30.585cm" svg:height="11.172cm"/>
Hier ist ein Eintrag zusätzlich vorhanden (chartooo:coordinate-region) der meine eben geschilderte Beobachtung soweit bestätigt. Die Maßdiskrepanz kommt daher, das ich den Scrennshot ohne anschließenden XRAY aufruf durchgeführt hatte.

Mittels XRAY habe ich mir alles notiert was irgendwie mit Maße in Bezug auf das Diagramm zu tun hat, und das von beiden Programmen. Dabei fiel mir auf, das ich rein theoretisch doch die Axen positionieren könnte wenn ich schon die Daten habe. Also in etwa so.

Code: Alles auswählen

oDiagram.yAxis.Position.Y = 1500
oDiagram.xAxis.Position.X = 1500
Doch das Makro ignoriert das einfach. Ich kann einfach keine Änderung feststellen, wenn ich diese beiden Zeilen zusätzlich einfüge.


Jemand ne Idee wie ich die Positionsveränderung dennoch hinbekomme?



Gruß
balu
Sei öfter mal ein Faultier, sag öfter mal "Ach was!" Dann kriegst du keinen Herzinfarkt, und hast ne menge Spass.

wehr rächtschraipfähler findet khan si behalden :D
DPunch
*******
Beiträge: 1112
Registriert: Mo, 02.11.2009 16:16
Wohnort: Marburg

Re: Erstellen eines Balkendiagramm in OOo 3.3.0 problematisc

Beitrag von DPunch »

Servus
balu hat geschrieben:Also in etwa so.

Code: Alles auswählen

oDiagram.yAxis.Position.Y = 1500
oDiagram.xAxis.Position.X = 1500
Doch das Makro ignoriert das einfach. Ich kann einfach keine Änderung feststellen, wenn ich diese beiden Zeilen zusätzlich einfüge.
Ohne zu wissen, ob das Dein Problem im Speziellen löst, mal ganz allgemein:
Position gibt ein Struct zurück - Du kannst also nicht einfach die Werte darin überschreiben, sondern musst ein neues Struct zuweisen (wie ich vermute aufgrund der ByValue-Übergabe von Objekten in der tieferliegenden Java-Umgebung).
In der Art

Code: Alles auswählen

newPosition = oDiagram.yAxis.Position
newPosition.Y = 1500
oDiagram.YAxis.Position = newPosition
Benutzeravatar
balu
********
Beiträge: 3812
Registriert: Fr, 24.08.2007 00:28
Wohnort: Warstein

Re: Erstellen eines Balkendiagramm in OOo 3.3.0 problematisc

Beitrag von balu »

Ave DPunch,
Ohne zu wissen, ob das Dein Problem im Speziellen löst, mal ganz allgemein:
Der Denkanstoß war schon mal nicht schlecht. Nur ich war mit dem Problem so sehr beschäftigt gewesen, das ich wahrlich nicht mehr den Wald vor lauter Bäumen gesehen habe. Aber ich habe dennoch herausgefunden wie es richtig geht, und das war für mich jetzt noch mal ein anstrengendes Stück Arbeit. Mag sein das vielleicht jemand anderer sagen könnte: "Mensch Junge! Das ist doch logisch das das so und nicht anders gemacht wird." Jedoch musste ich selber erstmal dahinter steigen.

Ich war nämlich der falschen Spur "Properties" gefolgt, was mich in die Sackgasse führte. Richtig ist nämlich "Methods", und das sieht dann so aus.

Code: Alles auswählen

Dim newPosition as new com.sun.star.awt.Point
newPosition.X = 500
newPosition.Y = 500
oDiagram.setPosition (newPosition)
Und dadurch habe ich jetzt ein Problem weniger. In beiden Programmen sind jetzt die Startpositionen nicht nur aufm Papier, sondern auch Optisch identisch, so wie ich es haben wollte. Jedoch staucht jetzt OOo 3.2.1 das gesamte Diagramm etwas, obwohl der Code inklusive der Schriftgröße und Schriftart identisch ist. Ich denk mir aber das ich das jetzt auch noch geregelt bekomme. Hoffentlich!

Wenn ich auch diese Hürde überwunden habe, werde ich das hier mitteilen. Das könnte aber ne Weile dauern.

Ich danke dir auch für deine Hilfe :D.


Gruß
balu
Sei öfter mal ein Faultier, sag öfter mal "Ach was!" Dann kriegst du keinen Herzinfarkt, und hast ne menge Spass.

wehr rächtschraipfähler findet khan si behalden :D
DPunch
*******
Beiträge: 1112
Registriert: Mo, 02.11.2009 16:16
Wohnort: Marburg

Re: Erstellen eines Balkendiagramm in OOo 3.3.0 problematisc

Beitrag von DPunch »

Servus
balu hat geschrieben:Ich war nämlich der falschen Spur "Properties" gefolgt, was mich in die Sackgasse führte. Richtig ist nämlich "Methods", und das sieht dann so aus.
Damit bist Du allerdings auch auf der falschen Spur, denn es macht keinerlei Unterschied, ob Du

Code: Alles auswählen

Position = newPosition
oder

Code: Alles auswählen

.setPosition(newPosition)
verwendest.

Die Möglichkeit, die Property einfach über "=x" zu setzen ist eine reine "Wohlfühlfunktion", im Hintergrund wird sowieso der Setter, also ".setPosition" aufgerufen.

Der einzige Fehler war der, dass Du direkt ein Attribut im Struct setzen wolltest (".Position.Y = 1500"), was eben nicht geht.
Benutzeravatar
balu
********
Beiträge: 3812
Registriert: Fr, 24.08.2007 00:28
Wohnort: Warstein

Re: Erstellen eines Balkendiagramm in OOo 3.3.0 problematisc

Beitrag von balu »

Tach DPunch,
balu hat geschrieben:Ich war nämlich der falschen Spur "Properties" gefolgt, was mich in die Sackgasse führte. Richtig ist nämlich "Methods", und das sieht dann so aus.
Damit bist Du allerdings auch auf der falschen Spur
In diesem Falle hast Du recht.

Der einzige Fehler war der, dass Du direkt ein Attribut im Struct setzen wolltest (".Position.Y = 1500"), was eben nicht geht.
Ich seh diesen Fehler ein.


Es gibt keine Pauschale Antwort darauf, ob man Werte über "Properties" oder über "Methods" setzen soll. Das kommt nur darauf an welche Methode unterstüzt wird. Nicht immer kann man "Methods" nehmen.

Code: Alles auswählen

Dim aSize as new com.sun.star.awt.Size	
aSize.Width = 33600
aSize.Height = 12745
oDiagram.setSize (aSize)
Wenn ich jetzt noch dadurch dem Diagramm eine feste Größe zuordne, dann kann es sich auch nicht mehr fortbewegen, wenn ich XRAY aurufe. Warum aber XRAY, so wie eingangs geschildert, die Darstellung des Diagramm beeinflussen kann, bleibt mir weiterhin ein Rätsel. Und die Darstellung ist in beiden Programmen jetzt auch bis auf ein paar Zehntel Millimeter identisch, die aber nicht stören.


Und damit wäre das Thewma hier vorläufig erledigt.



Gruß
balu
Sei öfter mal ein Faultier, sag öfter mal "Ach was!" Dann kriegst du keinen Herzinfarkt, und hast ne menge Spass.

wehr rächtschraipfähler findet khan si behalden :D
DPunch
*******
Beiträge: 1112
Registriert: Mo, 02.11.2009 16:16
Wohnort: Marburg

Re: [erl]Erstellen eines Balkendiagramm in OOo 3.3.0 problem

Beitrag von DPunch »

Servus
balu hat geschrieben:Es gibt keine Pauschale Antwort darauf, ob man Werte über "Properties" oder über "Methods" setzen soll.
Genau genommen gibt es eine pauschale Antwort: es ist schlichtweg egal ;)
Antworten