Datenbereich im Calc Diagramm ändern

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

Moderator: Moderatoren

sarotti
****
Beiträge: 105
Registriert: So, 12.03.2006 17:40
Wohnort: Nähe Krefeld

Datenbereich im Calc Diagramm ändern

Beitrag von sarotti »

Hallo zusammen,

Habe folgendes Problem:

Ich habe ein Calc Dokument erstellt, in dem ich ein Diagramm (Chart) eingebaut habe. In meiner Tabelle 1 (hier stehen die Diagrammdaten) möchte ich nun den Datenbereich ändern (einlesen einer Datenbankdatei - ist mit einem anderen Makro erledigt) und anschließend das Diagramm automatisch auf diesen Datenbereich ändern.
Habe das folgende Makro fertig, schaffe es aber nicht die Ansicht des Diagramms automatisch anzupassen. D.h. der Datenbereich wird zwar geändert, aber in der Anzeige nicht aktualisiert (rechte Maustaste auf dem Diagramm zeigt den neuen Datenbereich an). Was muss man tun um die Aktualisierung der Chart Anzeige durchzuführen????

Habe was von einem Listener gelesen...aber keine Ahnung wie das gehen soll!!!???!!!

hier der funktionierende Code:

Code: Alles auswählen


sub Tbl_Diagramm
DIM oDoc
DIM arg()
DIM iZeile as integer, iSpalte as integer
lsearch=63

sURL=ConvertToURL("c:/test/Diagramm.ots") '//Name der Vorlage mit dem Vorgabediagramm
oDoc=StarDesktop.loadComponentFromUrl(sURL, "_blank", lsearch, Arg())

oDoc=ThisComponent

oSheet1=oDoc.sheets.getByIndex(0) '//Auswahl des ertsen sheets
iZeile=Ubound(oSheet1.RowDescriptions)+1 '//auslesen der letzen Zeile
iSpalte=Ubound(oSheet1.ColumnDescriptions) '//auslesen der letzten Spalte

x=Array("A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z")

'sBereich="$Tabelle1.$A$1:.$"+x(iSpalte)+"$"+cInt(iZeile) '//so lautet die eigentliche Verwendung für später
sBereich="$Tabelle1.$B$1:.$D$8" '//neuer Datenbereich zum Test

REM das Calc Dokument beinhaltet schon ein Diagramm in dem Sheet "Diagramm1"

oSheetsDia=oDoc.sheets.getByName("Diagramm1")
oCharts=oSheetsDia.getCharts.getByIndex(0)
oChartObj=oCharts.EmbeddedObject
oChartObj.ChartRangeAddress=sBereich

oChartObj.Title.String="**neuer Haupttitel**"
oChartObj.Subtitle.String="**neuer Untertitel**"

'//hier fehlt die Aktualisierung des Datenbereiches des Diagramms
'//der neue Bereich wird akzeptiert (ist eingetragen bei Datenbereich ändern)

end sub

Gruss
sarotti
stbuerk
***
Beiträge: 97
Registriert: Do, 05.01.2006 08:31
Wohnort: Wuppertal

Re: Datenbereich im Calc Diagramm ändern

Beitrag von stbuerk »

Hallo sarotti,
an der glechen Stelle hänge ich auch,
hast Du seinerzeit eine Lösung gefunden?

Stbuerk
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Datenbereich im Calc Diagramm ändern

Beitrag von Stephan »

ich würd das einfach mit dispatcher machen (.uno:ChangeChartData), das Ändern des Datenbereichs lässt sich aufzeichnen und und Du mußt nur in der Aufzeichnung die eine Zeile mit den Datenbereich anpassen.



Gruß
Stephan
stbuerk
***
Beiträge: 97
Registriert: Do, 05.01.2006 08:31
Wohnort: Wuppertal

Re: Datenbereich im Calc Diagramm ändern

Beitrag von stbuerk »

Hallo Stephan,
danke für die schnelle Antwort!

Mit dem Dispatcher kenne ich mich lieder kaum aus. Zudem will ich den vorhandenen Datenberiech erst auslesen und dann je nach dem ändern. Das bekomme ich mit Makroaufzeichnung nicht hin?
Worum es mir letztlich geht. Ich habe ein Blatt "Tabelle_1" Daten mit einem Diagramm. Aus diesem Blatt erzeuge ich per Kopieren ein neues Blatt "Tabelle_2". Leider bezieht sich die Grafik auf "Tabelle_2" auf das Blatt "Tabelle_1", die Grafik soll sich aber auf die Daten beziehen, die im Blatt "Tabelle_2" stehen. Daher habe ich den Datenberich ausgelesen und mittels kompluizierte String-Manipulationen entsprechend geändert.
(Ich will flexibel bleiben, so dass das Makro auch dann noch funktioniert, wenn das Diagramm per Hand aus Calc heraus geändert wurde, ansonsten könnte
ich, wie Du vorgeschagen hast, den Datenbereich per Dispatcher zuordnen, ich will ihn aber auslesen und ändern)

Nun stosse ich noch auf ein neues Problem. Wenn man einen Wert sich selber zuweist, dürfte doch eigentlich nichts passieren? Mit den Zeilen

d = ThisComponent.currentController.ActiveSheet.getcharts.getbyindex(0)
e = d.embeddedObject.ChartRangeAddress
d.embeddedObject.ChartRangeAddress = e ' Selbstzuweisung -> hier dürfte eigentllich nix passiern ??????
kriegte ich aber mein Diagramm kaputt!!??

Man merkt es nicht sofort, aber wenn man sich per Calc und Maus den Datenbereich ansieht, ist der defekt, beim Schliessen und Wiederöffnen Blattes sieht man das auch dem Diagramm an.

Wenn nicht mal das klappt, kann ich die String-Manipulation natürlich vergessen.

stbuerk
Antworten