Abfrage Ergebnis mittels Makro in Calc Zellen schreiben

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

Moderator: Moderatoren

Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: Abfrage Ergebnis mittels Makro in Calc Zellen schreiben

Beitrag von komma4 »

...in Deinem posting von 9:25h schreibst Du:

Code: Alles auswählen

oBereich = oBlatt.getCellRangeByName("G1:I1")'Position( 0, 0, iAnzahlSpalten - 1 , iAnzahlZeilen )

Damit holst Du nur einen einzeiligen Bereich.
Wenn Du die Ausgabe ab G1 habe willst:

Code: Alles auswählen

oBereich = oBlatt.getCellRangeByPosition( 0, 6, iAnzahlSpalten - 1 , iAnzahlZeilen )

Hilft das?
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: Abfrage Ergebnis mittels Makro in Calc Zellen schreiben

Beitrag von sg1985 »

hilft leider nicht, ich habe das auch schon ausprobiert, aber da bekomme ich immer eine IndexOutOfBoundsException in dieser Zeile:
oBereich = oBlatt.getCellRangeByPosition( 0, 6, iAnzahlSpalten - 1 , iAnzahlZeilen )

in den Variablen iAnzahlSpalten und iAnzahlZeilen steht zum Beispiel 3 und 3 (also 3 Spalten und 3 Datensätze)

in meinem konkreten Fall sollen in G1, H1 und I1 die 3 Spaltenüberschriften stehen und in den Zeilen darunter (aber gleiche Spalte) die Datensätze.

Also zb:

G1 H1 I1
Taskname Sollstunden Iststunden
task1 64 72
task2 3 5
task3 10 9
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: Abfrage Ergebnis mittels Makro in Calc Zellen schreiben

Beitrag von komma4 »

shit ... ich mache heute Fehler!


die Range-Anweisung:

arbeitet mit Indices, nicht den Zelladressen. Reihenfolge ist Spalte, Zeile - jeweils für den Start und End-Punkt.

6,0 ist G1

Zu der Anzahl der Zeilen muss die Startzeile (hier: sechse) dazu gezählt werden:

Code: Alles auswählen

startSpalte = 6  ' G
startZeile = 0    '  erste Zeile ! 
oBereich = oBlatt.getCellRangeByPosition( startSpalte, startZeile,  startSpalte + iAnzahlSpalten - 1, startZeile + iAnzahlZeilen  )
ich hoffe, das war es.....?
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: Abfrage Ergebnis mittels Makro in Calc Zellen schreiben

Beitrag von sg1985 »

juhu, das war es!! Danke für deine Hilfe!
sg1985
***
Beiträge: 89
Registriert: Mo, 07.07.2008 15:22

Re: Abfrage Ergebnis mittels Makro in Calc Zellen schreiben

Beitrag von sg1985 »

wobei ich noch eine kleine Frage hätte, ich würde die Spaltenüberschriften gerne fett schreiben (bold), ich bekomm es zwar hin wenn ich es mit dem Makrorecorder aufzeichne (aber das ist ja nicht dynamisch an die Spaltenanzahl angepasst dann), im Forum habe ich auch etwas dazu gefunden wie man das Attribut "bold" setzt, jedoch weiß ich nicht welches Objekt ich in meinem Makro ansprechen muss (also welcher Variable ich die Eigenschaft bold geben muss), damit nur die Spaltenüberschriften fett werden?!
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: Abfrage Ergebnis mittels Makro in Calc Zellen schreiben

Beitrag von komma4 »

...also, ich setze den Bereich und wende die Zellvorlage "Überschrift" an (die entsprechend eingestellt ist):

Code: Alles auswählen

oBereich.setPropertyValue( "CellStyle", "Heading" )
...oder mit direkter, "harter" Formatierung direkt:

Code: Alles auswählen

oBereich.CharWeight=com.sun.star.awt.FontWeight.BOLD
hilft das?


Kann ich sonst noch etwas für Dich tun? Wie wäre es mit dem Fenster>Fixieren?

Code: Alles auswählen

ThisComponent.getCurrentController().FreezeAtPosition(0,0)
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: Abfrage Ergebnis mittels Makro in Calc Zellen schreiben

Beitrag von sg1985 »

hat geholfen, danke :)

hm was genau bringt es das Fenster zu fixieren?

momentan versuche ich bevor das Ergebnis der SQL Abfrage dargestellt wird, das "alte" Ergebnis zu löschen.
Wenn eine Abfrage nämlich beispielsweise 4 Datensätze liefert und ich möchte die Abfrage neu absetzen (diese liefer nun nur 3 Datensätze),
so werden die alten 3 Datensätze zwar mit den neuen überschrieben, aber der alte 4. Datensatz steht nun auch noch da, obwohl diese Zeile leer sein sollte,
da ich bei der neuen Abfrage ja nur mehr 3 Datensätze habe.

Habe bereits einige Versuche unternommen (Bereich löschen, alles mit einem leeren String zu befüllen), aber es klappt nicht so recht :(
Wichtig ist, dass ich nicht das ganze calc Sheet lösche, da die Listbox ja erhalten bleiben muss und ich dort einfach nur einen anderen Eintrag wähle, dann auf das Makro klicke
und dann sollte der Bereich (G1-I1) wo das Ergebnis der SQL Abfrage hinkommt, gelöscht werden, bevor das neue Ergebnis rein geschrieben wird.
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: Abfrage Ergebnis mittels Makro in Calc Zellen schreiben

Beitrag von komma4 »

Fixieren: hält die Überschriften beim Blättern nach unten im sichtbaren Bereich.


Wenn Du die gefüllten Spalten löschen kannst, dann:

Code: Alles auswählen

oBlatt = ThisComponent.getCurrentController().getActiveSheet()
oBlatt.Columns().removeByIndex( 6, 3 )  ' ab G drei Spalten löschen
Wenn Du Inhalte löschen willst:

Code: Alles auswählen

oBlatt = ThisComponent.getCurrentController().getActiveSheet()
oRange = oBlatt.getCellRangeByPosition( 6, 0, 8, 3 )
oRange.clearContents( 7 )
Konstanten der Inhaltstypen der Zelle [/common/ref/com/sun/star/sheet/CellFlags.html]:

Code: Alles auswählen

'1 - value
'2 - date, time
'4 - strings
'8 - annotation
'16 - formula
'32 - hardattr
'64 - styles
'128 - objects 
Kombination der Typen durch Addition: 7 = 1+2+4

Alles klar?
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: Abfrage Ergebnis mittels Makro in Calc Zellen schreiben

Beitrag von sg1985 »

Ich habe es nun mit der ersten Variante gelöscht (also den Inhalt ganzer Spalten löschen), jedoch gibts hier ein komisches Phänomen:

Wenn gerade eine der zu löschenden Zellen selektiert ist oder man mit dem Cursor drinnen steht, dann wird diese nicht gelöscht, obwohl sie sich in
der zu löschenden Spalte befindet - steht man mit dem Cursor nicht drinnen, klappts wunderbar.

Hast du eine Idee wie man das weg bekommen könnte oder warum das so ist? Das einzige was mir einfällt, wäre den Cursor vorm Löschaufruf zb. per Makro in eine
andere Spalte zu setzen, die nicht gelöscht werden muss (weiß aber auch nicht, ob das geht oder obs nicht doch eine schönere Lösung gibt?!)

lg
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: Abfrage Ergebnis mittels Makro in Calc Zellen schreiben

Beitrag von komma4 »

Ich kann bestätigen, dass Columns().remove nicht funktioniert, wenn die Zelle im Edit-Modus ist.

Zur Lösung fällt mir aktuell auch nichts anderes ein als Dir.
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)
tunix_xl
**
Beiträge: 41
Registriert: Di, 27.11.2007 17:09

Re: Abfrage Ergebnis mittels Makro in Calc Zellen schreiben

Beitrag von tunix_xl »

Hy

... im Makro vor dem remove Befehl den Cursor in andere Zelle setzen:

Code: Alles auswählen

Dim oZelle As Object
oZelle = oBlatt.getCellByPosition(100,100)
oNeuDok.CurrentController.select(oCell)

statt 100,100 eigene Werte für Spalte und Zeile setzen...
Toshiba Satelite L20 ubuntu 09.04 / 32bit / ooffice3.1 / LAMP
Gesperrt