Ergebnis von Select Anweisung in calc Sheet schreiben

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

Moderator: Moderatoren

sg1985
***
Beiträge: 89
Registriert: Mo, 07.07.2008 15:22

Ergebnis von Select Anweisung in calc Sheet schreiben

Beitrag von sg1985 »

Hallo,

ich habe ein Makro, das eine Select Anweisung ausführt, dessen Ergebnis dann in ein Calc Sheet geschrieben werden soll.
Alles kein Problem, solange man das Ergebnis der Select Anweisung spaltenweise in ein Array und dann ins Calc Sheet schreiben kann.

Ich brauche das Ergebnis der Select Anweisung im calc Sheet aber in anderer Form. Ich erhalte als Ergebnis 3 Spalten (mehrere Monate, mehrere Tasknamen, dazugehörige Stundenanzahl),
wobei die Monate in die Spalte geschrieben werden sollen, die Tasknamen in die Zeile und die Stundenanzahl eben in die entsprechende Spalte+Zeile.

Ich habe ein Datei angehängt, die ein Beispiel enthält wie es ausschauen soll.

Als Ergebnis der Select Anweisung erhalte ich beispielsweise folgende Datensätze, wobei jeder Datensatz aus 3 Spalten besteht:
06 Krank 4,5
06 Besprechung 3,25
07 Controlling 25,5
Dateianhänge
Beispiel.ods
(10.06 KiB) 62-mal heruntergeladen
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: Ergebnis von Select Anweisung in calc Sheet schreiben

Beitrag von komma4 »

Eine Ausgabe der Daten im gewünschten Format lässt sich bestimmt auch mit der SQL-Abfrage erzielen (DISTINCT, GROUP BY, SUM, Sub-SELECTs), das kann bei variabler Anzahl der Tätigkeiten aber recht schnell unübersichtlich werden.


wie wäre es mit:
Ausgabe der SQL_Abfrage wie bekannt(Tabelle3), dann erzeuge mit dem Datenpilot die gewünschte Ausgabe (Tabelle2).

Die "Tabelle3" kannst Du ausblenden,

Ist das unsere nächste Basic-Übung?
Dateianhänge
de.18962.ods
Ausgabe mit Datenpilot(Entwurf)
(10.39 KiB) 54-mal heruntergeladen
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
sg1985
***
Beiträge: 89
Registriert: Mo, 07.07.2008 15:22

Re: Ergebnis von Select Anweisung in calc Sheet schreiben

Beitrag von sg1985 »

Hallo Winfried,

Bei der SQL Abfrage kann man hier leider nicht mehr erreichen, die Stunden pro Monat für einen bestimmten Task werden schon nur einmal selektiert und summiert. D.h. es gibt sowieso schon nur mehr einen Datensatz für ein bestimmtes Monat und einen bestimmten Task, natürlich kann es vom gleichen Monat aber auch noch andere Tasks geben.

Die Lösung mit dem Datenpilot gefällt mir insofern nicht, da ich alles mit einem Makro lösen sollte - und es für den späteren Benutzer wirklich so einfach sein sollte, dass er nur auf die Schaltfläche klickt, die das Makro auslöst und schon hat er das Ergebnis der SQL Abfrage im Calc Sheet stehen.

Gibt es da nicht noch mehr Möglichkeiten das Ergebnis per Makrocode in ein Calc Sheet zu schreiben? (also halt nicht nur spaltenweise in ein Array, sondern halt irgendwie anders)

An dieser Stelle möchte ich mich noch einmal bei dir für deine Geduld und deinen Einsatz bedanken :)
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: Ergebnis von Select Anweisung in calc Sheet schreiben

Beitrag von komma4 »

You're welcome.

Natürlich kannst Du Zellen einzeln setzen, adressiere eine Zelle und setze Wert, Formel oder Zeichenkette:

Code: Alles auswählen

oBlatt = ThicComponent.Sheets().getByName(" Jahr2008" )

oZelle1 = oBlatt.getCellRangeByName( "F2" )
oZelle2 = oBlatt.getCellByPosition( 3, 6 )

oZelle1.setString( "Datum" )
oZelle2.setValue( 39661 ) 
Dabei musst Du den Gruppenwechsel für die Zeilen (Monat ändert sich) halt selbst programmieren und Dir die Ausgabespalten aufbereiten (:= merken, welche Tätigkeit in welche Spalte kommt).
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
sg1985
***
Beiträge: 89
Registriert: Mo, 07.07.2008 15:22

Re: Ergebnis von Select Anweisung in calc Sheet schreiben

Beitrag von sg1985 »

hm ok ich glaube das würde zu kompliziert werden.

Also bei deinem Vorschlag mit dem Datenpilot müsste man ja nur auf Daten/Datenpilot gehen, dort "aktuelle Selektion" auswählen, das Layout einstellen und auf "OK" klicken und schon
hat man die gewünscht Ansicht.

Nun meine Frage: kann man das mit dem Makro automatisieren, so dass es der User den Datenpilot nicht händisch aufrufen und einstellen muss, sondern die Arbeit auch gleich vom Makro erledigt wird?
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: Ergebnis von Select Anweisung in calc Sheet schreiben

Beitrag von komma4 »

Aufwändig sind beide Lösungen.
Wobei das "manuelle Setzen" (Ansteuern der einzelnen Zellen) der Tabelle eben "nur" Fleissarbeit (Gruppenwechsel!) ist.


Ich selbst habe noch keinen DatenPiloten per Makro erstellt. Prinzipiell sollte aber alles, was "per Hand" er-/eingestellt werden kann, auch per Makro zu programmieren sein. Hat den Vorteil der Wiederverwendbarkeit und der Fehlervermeidung....

Code: Alles auswählen

oDok = ThisDocument.Sheets()
oBlatt = oDok.getByName( "Tabelle1" )
oPilotTabellen = oBlatt.getDataPilotTables()

If oPilotTabellen.hasByName( "Jahr2008" ) Then
  ' refresh ?
Else
  ' erstellen
  xray oPilotTabellen
 ' Methoden: .insertNewByName( name, datapilotdescriptor )
End If

Zu viel mehr werde ich heute nicht kommen.... Viel Erfolg!
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
sg1985
***
Beiträge: 89
Registriert: Mo, 07.07.2008 15:22

Re: Ergebnis von Select Anweisung in calc Sheet schreiben

Beitrag von sg1985 »

Hört sich gut an, dass man das auch alles per Makro programmieren kann, was man per Hand einstellen kann... dann würde ich das mit dem Datenpiloten gerne so machen, bin aber leider ein
wenig hilflos und habe keinen brauchbaren Code gefunden bis jetzt :(

Hat jemand von euch so etwas vielleicht schon mal programmiert oder kann mir weiter helfen?
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: Ergebnis von Select Anweisung in calc Sheet schreiben

Beitrag von komma4 »

wollte mich am Wochenende damit beschäftigen***, und dann war das Wetter zu gut...

Nun regnet es, mal schauen, ob ich ein Beispiel hinbekomme...


*** (bedeutet auch: ich kenne keinen Demo-Code im Netz)
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
sg1985
***
Beiträge: 89
Registriert: Mo, 07.07.2008 15:22

Re: Ergebnis von Select Anweisung in calc Sheet schreiben

Beitrag von sg1985 »

das wäre super, wenn du mir helfen könntest :)

ich sehe da 2 Möglichkeiten, entweder das SQL statement direkt vom Datenpiloten auswerten lassen (also den Datenpiloten auf eine SQL Abfrage aufrufen), oder das Ergebnis im Calc sheet ausgeben (dann ausblenden) und dann den Datenpiloten auf diese (aktuelle Selektion) aufrufen. Wobei ich wie gesagt nicht weiß inwiefern das alles programmiertechnisch effizient lösbar ist.
turtle47
*******
Beiträge: 1849
Registriert: Mi, 04.01.2006 20:10
Wohnort: Rheinbach

Re: Ergebnis von Select Anweisung in calc Sheet schreiben

Beitrag von turtle47 »

sg1985 hat geschrieben:Nun meine Frage: kann man das mit dem Makro automatisieren, so dass es der User den Datenpilot nicht händisch aufrufen und einstellen muss, sondern die Arbeit auch gleich vom Makro erledigt wird?
Hilft dieser Link weiter?

Jürgen
Software hat keinen Verstand - benutze deinen eigenen...!

Win 7 SP1/ LibreOffice 3.4.2 OOO340m1 (Build:203) / Firefox 15.0.1 / Notebook ASUS K70IO 64 Bit-Betriebssytem
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: Ergebnis von Select Anweisung in calc Sheet schreiben

Beitrag von komma4 »

Bei Ian aus Neuseeland findet sich eine Beispieldatei, die ich aber noch nicht untersucht habe: http://homepages.paradise.net.nz/hillvi ... Pilot3.ods

Viel Erfolg!
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
sg1985
***
Beiträge: 89
Registriert: Mo, 07.07.2008 15:22

Re: Ergebnis von Select Anweisung in calc Sheet schreiben

Beitrag von sg1985 »

auf den Link von turtle bin ich vorher auch schon gestoßen, aber ich komme irgendwie nicht zu Recht mit dem Code :(

Das Beispiel vom Ian ist mir ein bisschen zu viel, vor allem soll der spätere User ja nicht wieder etwas einstellen müssen bei einem Dialog für den Datenpiloten.
Ich brauche ja immer nur das gleiche Layout des Datenpiloten (Monat als Zeilenfeld, Taskname als Spaltenfeld und Stunden als Datenfeld.

@winfried: versuchst du dich auch noch an einem Demo-Code Beispiel für den Datenpiloten?
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: Ergebnis von Select Anweisung in calc Sheet schreiben

Beitrag von komma4 »

ja, versuchen will ich das schon. Der erste Blick auf den Code von Ian lässt mich hoffen, dass ich das schaffe.
Die Woche ist allerdings schon arg belegt bei mir.
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
sg1985
***
Beiträge: 89
Registriert: Mo, 07.07.2008 15:22

Re: Ergebnis von Select Anweisung in calc Sheet schreiben

Beitrag von sg1985 »

schade, ich muss es nämlich bis spätestens Mittwoch so hinbringen mit dem einfachen Datenpiloten. Ich hoffe, ich schaff das irgendwie :(
sg1985
***
Beiträge: 89
Registriert: Mo, 07.07.2008 15:22

Re: Ergebnis von Select Anweisung in calc Sheet schreiben

Beitrag von sg1985 »

ich glaube übrigens der Code vom Link von turtle ist einfach zu verstehen, obwohl ich da auch schon hänge...
Antworten