LineChart\content.xml Einstellungen in Makro übernehmen?

Antwort erstellen


BBCode ist eingeschaltet
[img] ist ausgeschaltet
[url] ist eingeschaltet
Smileys sind ausgeschaltet

Die letzten Beiträge des Themas
   

Ansicht erweitern Die letzten Beiträge des Themas: LineChart\content.xml Einstellungen in Makro übernehmen?

Re: LineChart\content.xml Einstellungen in Makro übernehmen?

von balu » Sa, 21.05.2011 00:05

Hallo liebe Leute,

leider hab ich doch noch nicht mein Ziel erreicht. Mag durchaus sein das ich mich nicht deutlich genug ausgedrückt hatte. Und damit es diesmal keine Missverständnisse gibt, hänge ich zusätzlich noch einen Screenshot hier ein. Doch dazu später.

Also, durch die API habe ich jetzt mittlerweile in Erfahrung gebracht, das mein Ziel "DataPointProperties" heißt -{falls ich nicht schon wieder falsch liege}-. Nur ich raffe es nicht wie ich es richtig anwenden muss.
Mit

Code: Alles auswählen

chart.Diagram = chart.CreateInstance("com.sun.star.chart.StackableDiagram")
bekomme ich ja wohl zugriff auf das Diagramm.

Was muss ich denn jetzt aber hier anstelle der Fragezeichen schreiben?

Code: Alles auswählen

?????? = ??????("com.sun.star.chart2.DataPointProperties")
Ich denk mir mal, wenn ich diese Hürde überwunden habe, dann müsste ich doch endlich zu meinem Ziel kommen.
Und dieses Ziel soll dann so in etwa aussehen.
datenpunkte-reihe.png
datenpunkte-reihe.png (37.12 KiB) 1559 mal betrachtet
Könnt ihr mir noch mal unter die Arme greifen?


Gruß
balu

Re: LineChart\content.xml Einstellungen in Makro übernehmen?

von balu » Fr, 20.05.2011 20:18

Hallo Jürgen,

auch dir ein Danke schön für deine Antwort :D.

Und jetzt muss ich mich entschuldigen.
Sorry, ich hatte gestern im Eifer des Gefechts leider nicht darauf hingewiesen, das es mir in der verlinkten Beispieldatei um das Diagramm in Sheet1 ging. Ich war einfach zu vernagelt gewesen :oops: .
Und von daher passt leider nicht dein Vorschlag.


Gruß
balu

Re: LineChart\content.xml Einstellungen in Makro übernehmen?

von balu » Fr, 20.05.2011 20:16

Sei gegrüßet DPunch,

erst mal eine Danke schön für deine Antwort :D.

aber ein kurzer Check per XRay ergibt zum Beispiel, dass das Pendant zum von Dir genannten "data-lebel-text=true" in Basic per

Code: Alles auswählen

oDiagram.YAxis.DisplayLabels = True
zu bewerkstelligen ist.
Ja dolle! Und das ist genau einer von den Punkten wo ich graue Haare kriege. Für mich ist "data-label-text" in meinem Falle ehern selbstredend in Bezug auf Datenreihenbeschriftung, als "DisplayLabels". Also ich wär nicht auf die Idee gekommen diese Spur weiter zu verfolgen.
Aber es gibt da auch noch andere Bezeichnungen in xray auf die ich mir beim besten Willen einfach keinen Reim drauf machen kann. Nur mal so allgemein gesagt.

Zu finden ist das unter OOo API: Service ChartAxis
Der Traum meiner schlaflosen Nächte. Und so weit ich mich recht erinnern kann, bin ich wohl nicht der einzige der mit der API-Doku nicht wirklich warm wird. Weil da meine Englischkenntnisse sehr schnell aussteigen. Aber nun gut, da kannst Du ja nichts für. Weder für mein Englisch, noch für die API.
Ich versuche ja auch immer irgendwie die Verlinkung aus xray raus zur SDK zu durchforsten und zu verstehen. Nur leider nicht immer mit Erfolg.
Aber dennoch werd ich mich weiterhin bemühen da besser durchzublicken.


Wichtig dabei: die Werte von Enumerationen werden nicht als String ala "NEAR_AXIS" übergeben, sondern mit ihrer "vollen" Bezeichnung wie

Code: Alles auswählen

oDiagram.YAxis.LabelPosition = com.sun.star.chart.ChartAxisLabelPosition.OUTSIDE_START
intern wird dies wie bei allen Enumerationen zu einer Ganzzahl übersetzt (in diesem Fall 2), Du könntest also auch einfach

Code: Alles auswählen

oDiagram.YAxis.LabelPosition = 2
schreiben.
Das ist für mich eine sehr interessante und aufschlußreiche Information.


balu hat geschrieben:Denke und handel ich so weit theoretisch richtig?
Ohne mich mit den XML-Spezifikationen der odf-Dateien genauer beschäftigt zu haben, würde ich sagen, dass Du da durchaus hilfreiche Hinweise finden kannst, aber ein direkter Rückschluss auf die Umsetzung in StarBasic ist wohl eher Zufall. Im Idealfall haben die entsprechenden Properties natürlich gleichlautende oder zumindest sehr ähnliche Namen, diesen Idealfall kann man aber gerade bei einem Open-Source-Projekt kaum annehmen.
Das mich der *Kommissar Zufall* besucht hatte, hatte ich ja auch schon festgestellt. Und diesen Weg werd ich wohl auch nicht mehr weiter verfolgen, da er schnell einen in die Irre führen kann. Denn es ist ja dort leider nicht aufgelistet zu welchem Service was gehört. Und das ist ja der wichtigste Punkt.

Nun, einfach im XRay rumschmökern und die entsprechenden Werte genauer anschauen.
[...]
Tja wenn mein Englisch nur besser wäre.

Mit XRay untersuchen -> alle Eigenschaften per Copy-Paste z.B. in ein Calc-Sheet kopieren -> XRay dichtmachen
Auch das hab ich schon von zu Fuß aus gemacht. Sprich; per Auge Zeile für Zeile verglichen. Nur es nützt nicht viel wenn man "falsche" Wege schon beschritten hat, und dann selbst mit ner Kettensäge nicht mehr ausm Wald rausfindet.

Mit einem simplen Makro kann man sich das vereinfachen, siehe Anhang
Werd ich mir aufheben. Danke.

So, und nun heißt es für mich das neue Wissen in die Tat umzusetzen. Denn Du hasst mich durch deine Antwort auf eine Spur geführt die ich wo anders auch noch nutzbringend anwenden kann :D.


Gruß
balu

Re: LineChart\content.xml Einstellungen in Makro übernehmen?

von turtle47 » Fr, 20.05.2011 19:29

Hallo Balu,
balu hat geschrieben:- Könnt ihr mir dabei helfen mein Ziel zu erreichen? Datenreihenbeschriftung
Ist es das was Du suchst?

Code: Alles auswählen

Sub dateChart2
Dim oSheet, oCharts, oChartDoc
Dim rect as new com.sun.star.awt.Rectangle
Dim aData1(4) REM it has to be a line vector to define the categories column
Dim aData2(4,0) REM it has to be a column vector for the y-data
oSheet = ThisComponent.Sheets.getByIndex(2)
oCharts = oSheet.Charts
	Set Charts = oSheet.getCharts
	rect.x = 0
	rect.Y = 0
	rect.Width = 15000
	rect.Height = 10000
REM line vector
aData1(0) = Format("06:00:00", "HH:MM") REM if you want to define your own format
aData1(1) = Format("07:00:00", "HH:MM")
aData1(2) = Format("08:00:00", "HH:MM")
aData1(3) = Format("09:00:00", "HH:MM")
aData1(4) = Format("10:00:00", "HH:MM")
REM column vector
aData2(0,0) = 1000
aData2(0,0) = 1000
aData2(1,0) = 1500
aData2(2,0) = 500
aData2(3,0) = 800
aData2(4,0) = 450


oCharts.addNewByName("chart0", rect, Array(), false, true)
oChartDoc = oCharts.getByName( "chart0" ).EmbeddedObject
oChartDoc.setDiagram( oChartDoc.createInstance("com.sun.star.chart.BarDiagram") )

REM insert the descriptions in the X categories
oChartDoc.Data.setRowDescriptions(aData1())
' oChartDoc.Data.setData(aData2()) or
oChartDoc.Data.Data = aData2()

Set oDiagram = oChartDoc.getDiagram
'drag the fourth segment 50% out
Dim aPointProp
for i = 0 to  ubound(aData2)
Set aPointProp = oDiagram.getDataPointProperties(i, 0)
aPointProp.SegmentOffset = 50
aPointProp.DataCaption=com.sun.star.chart.ChartDataCaption.VALUE
aPointProp.CharHeight=12
next
End Sub 
Wenn ja dann dazu passend http://api.openoffice.org/docs/common/r ... ption.html
DPunch hat geschrieben:vermutlich geht das sogar noch leichter mit einer Calc-Formel
Oder aber mit dem Tool WinMerge welches ich zum Vergleichen einsetze.

Jürgen

Re: LineChart\content.xml Einstellungen in Makro übernehmen?

von DPunch » Fr, 20.05.2011 18:52

Aloha

Zur Arbeit allgemein mit Diagrammen kann ich Dir leider nichts aus eigener Erfahrung sagen, aber ein kurzer Check per XRay ergibt zum Beispiel, dass das Pendant zum von Dir genannten "data-lebel-text=true" in Basic per

Code: Alles auswählen

oDiagram.YAxis.DisplayLabels = True
zu bewerkstelligen ist.
Zu finden ist das unter OOo API: Service ChartAxis
Dort ist dann auch LabelPosition zu finden, wobei die möglichen Werte unter OOo API: enum ChartAxisLabelPosition aufgelistet sind.
Wichtig dabei: die Werte von Enumerationen werden nicht als String ala "NEAR_AXIS" übergeben, sondern mit ihrer "vollen" Bezeichnung wie

Code: Alles auswählen

oDiagram.YAxis.LabelPosition = com.sun.star.chart.ChartAxisLabelPosition.OUTSIDE_START
intern wird dies wie bei allen Enumerationen zu einer Ganzzahl übersetzt (in diesem Fall 2), Du könntest also auch einfach

Code: Alles auswählen

oDiagram.YAxis.LabelPosition = 2
schreiben. Bis jetzt war es bei allen Enums so, dass die entsprechenden Werte in der Dokumentation von oben nach unten mit 0 beginnend durchnummeriert sind, wobei man sich darauf trotzdem nicht unbedingt verlassen sollte (bei OOo API: enum ChartAxisLabelPosition also NEAR_AXIS = 0, NEAR_AXIS_OTHER_SIDE = 1 usw).
balu hat geschrieben:Denke und handel ich so weit theoretisch richtig?
Ohne mich mit den XML-Spezifikationen der odf-Dateien genauer beschäftigt zu haben, würde ich sagen, dass Du da durchaus hilfreiche Hinweise finden kannst, aber ein direkter Rückschluss auf die Umsetzung in StarBasic ist wohl eher Zufall. Im Idealfall haben die entsprechenden Properties natürlich gleichlautende oder zumindest sehr ähnliche Namen, diesen Idealfall kann man aber gerade bei einem Open-Source-Projekt kaum annehmen.
balu hat geschrieben:Liegt es an der 3.2.1 das ich unter xray das nicht finde was ich suche?
(...)
Wo müsste ich denn eigentlich in xray die gesuchten Punkte finden?
Nun, einfach im XRay rumschmökern und die entsprechenden Werte genauer anschauen. Vielleicht noch in der API den entsprechenden Service-Namen (bei XRay unter "SupportedServiceNames" zu finden) suchen und da bisschen nachlesen, teilweise gibt es auch Verweise auf die Wiki (wobei die mir persönlich noch nie weitergeholfen haben, aber das muss ja nichts heissen).
Wenn das nichts hilft:
Mit XRay untersuchen -> alle Eigenschaften per Copy-Paste z.B. in ein Calc-Sheet kopieren -> XRay dichtmachen
dann die gewünschte Änderung durchführen (am besten nur eine)
wieder mit XRay untersuchen -> alle Eigenschaften per Copy-Paste z.B. in ein Calc-Sheet kopieren -> XRay dichtmachen
und dann die Eigenschaften vergleichen.
Findest Du Unterschiede, weisst Du, wo Du ansetzen musst, findest Du keine Unterschiede, musst Du offensichtlich woanders Nachschauen (z.B. im YAxis-Objekt statt im oDiagram-Object o.Ä.).
(Mit einem simplen Makro kann man sich das vereinfachen, siehe Anhang - vermutlich geht das sogar noch leichter mit einer Calc-Formel, aber davon hab ich wenig Ahnung ;))
Dateianhänge
DifferenceChecker.ods
(18.33 KiB) 99-mal heruntergeladen

LineChart\content.xml Einstellungen in Makro übernehmen?

von balu » Do, 19.05.2011 20:19

Schön guten Abend, liebe Gemeinde.

Verzeihung für meinen langen Text. Er soll nur verdeutlichen das ich wirklich nicht ganz untätig war, und ich mir gedanken mache.

Basic ist für mich eine verdammt schwere Angelegenheit. Ich versuche und pobiere ja alles mögliche aus, um an mein Ziel zu kommen. Und das so lange bis sich meine Augen nur noch im Kreise drehen.

Um bestimmte Einstellungen für ein Diagramm vorzunehmen, muss ich ja erst mal die "richtigen" Suchbegriffe wissen. Also habe ich eine LO portable auf Englisch eingestellt, um wenigstens einen Anhaltspunkt zu haben. Und damit hatte ich heute einen Teilsieg Erungen.

Nach dem ich ein Suchbegriff wusste, es ging um "Werte ausgeblendeter Zellen einbeziehen" also in Englisch um "Include values from hidden cells", hatte ich die Datei entpackt und die LineChart\content.xml mir genauer angeschaut. Und Bingo! Ich hatte dort in dieser Zeile

Code: Alles auswählen

<style:chart-properties chart:stacked="true" chart:vertical="true" chart:include-hidden-cells="false" chart:auto-position="true" chart:auto-size="true" chart:treat-empty-cells="leave-gap" chart:right-angled-axes="true"/>
tatsächlich "include-hidden-cells" gefunden. Und dann sagte mir noch xray, das das Basicwort dafür "IncludeHiddenCells" heißt. Also hab ich das gleich mal damit

Code: Alles auswählen

oDiagram.IncludeHiddenCells = true
ausprobiert. Und siehe da! Das funktioniert. :D

Da ich aber auch noch im Diagramm die Datenreihen beschriften möchte, und mal wieder nicht das richtige Wort dafür wusste, habe ich das ganze noch mal wie eben beschrieben durchgeführt.
Deutsch "Kategorie anzeigen", Englisch "Show category".
Nur kam ich diesmal nicht zum Ziel, da ich das in der content.xml nicht sofort gefunden hatte. Da ich aber wusste, dass bei Platzierung "Nahe Ursprung" = Placement "Near origin" ergab, fand ich in dieser Zeile

Code: Alles auswählen

<style:chart-properties chart:data-label-number="none" chart:data-label-text="true" chart:data-label-symbol="false" chart:label-position="near-origin"/>
ein paar weitere Infos. Und wenn mich nicht alles täuscht -{so dachte ich anfangs}-, dann müsste sich doch das jetzt in ungefährt so verhalten.
"Kategorie anzeigen" => "Show category" => data-label-text="true" => datalabeltext = true
Und demzufolge in Basic:

Code: Alles auswählen

chart.Diagram.YAxis.datalabeltext = true
oder so

Code: Alles auswählen

oDiagram.YAxis.datalabeltext = true 
Doch Pustekuchen! Das haut nicht vorne und hinten hin! Hatte auch noch das versucht.

Code: Alles auswählen

oDiagram.datalabeltext = true 
Aber das bringt auch nichts. Es heißt als Fehlermeldung immer: "Methode nicht gefunden"

Und xray durchblicke ich momentan auch nicht mehr. Ich find dort einfach nichts was mit "datalabeltext" zu tun hat. Unter was muss ich denn da suchen; Chart, Charts, Diagramm, YAxis? Ich find dort nichts. Oder ich such irgendwie falsch.
Oder hab ich jetzt ausnahmsweise etwas gefunden was sich anhand vom Quelltext (content.xml) nicht in Basic umsetzen läßt?


Bei meinem ersten Glückstreffer hatte es doch so schön gepasst. Zumal mir aufgefallen war, das mein gesuchtes Wort "IncludeHiddenCells" sich unter "chart-properties" befand. Und wenn ich xray aufrufe, dann gibts dort doch auch den Punkt Properties. Oder bin ich da einem Trugschluß aufgesessen, und das eine hat mit dem anderen nichts zu tun?

Ich möchte doch nur, das ich die Datenbeschriftung per Makro in die Tat umsetzen kann. Die Position des Datenpunktes (oder wie auch immer) müsste theoretisch ja hiermit funktionieren

Code: Alles auswählen

chart.Diagram.YAxis.LabelPosition = "near-origin"
Aber praktisch rührt sich da ja nichts, da kein Text angezeigt wird. Zumindest määäckert OOo ja schon mal nicht über diesen Satz. Scheint ein kleiner Hoffnungsschimmer zu sein.


So, und nun kommen meine abschlißenden Fragen.
- Denke und handel ich so weit theoretisch richtig?
- Liegt es an der 3.2.1 das ich unter xray das nicht finde was ich suche? (wir hatten hier das doch schon mal)
- Wo müsste ich denn eigentlich in xray die gesuchten Punkte finden?
- Könnt ihr mir dabei helfen mein Ziel zu erreichen? Datenreihenbeschriftung
- Könnt ihr bitte zu der ein oder anderen Frage was sagen? Denn mir gehts wirklich nicht nur um ein paar passende Code-Zeilen.

Eine Beispieldatei mit Diagramm findet ihr hier
Makro erstelltes Diagramm fest auf Uhrzeit einstellen.

Bedanke mich schon mal bei euch recht herzlich, allein für das Lesen.

Und freue mich wirklich auf eure Antworten. :D


Gruß
balu

Nach oben