for each Schleife in calc

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

Moderator: Moderatoren

monk77
Beiträge: 2
Registriert: So, 10.10.2010 16:43

for each Schleife in calc

Beitrag von monk77 »

Hallo, ich möchte gerne eine for-each-Schleife in calc nutzen. In Excel kam ich mit folgender Vorgehensweise (natürlich mit leichten Veränderungen der Syntax) immer zum Ziel. Ist der Befehl for each in OoBasic noch nicht implementiert? Ich las da einen veralteten Beitrag auf einer Webseite rund um Oo.

Ausgangssituation:

Die Zeilen A12:A16 enthalten Werte. Nun möchte ich rein zu Testzwecken, dass jede Zelle, welche den Wert 5 enthält, eine bestimmte Hintergrundfarbe erhält. Dazu nutze ich folgenden Code:

Code: Alles auswählen

sub schleife
dim sheet as object
sheet = thisComponent.sheets(0)

dim oRange as object

oRange = sheet.getCellRangeByName("A12:A16")
dim cell
For Each cell in oRange
if cell.value = 5 then
    cell.CellbackColor = rgb(172,255,47)
end if
next cell
end sub
Leider spuckt mir Oo immer den Hinweis aus, dass sich die Datentypen wohl nicht vertragen. Was mache ich falsch? Bin für jeden Hinweis sehr dankbar.

Grüsse
monk77
Karolus
********
Beiträge: 7532
Registriert: Mo, 02.01.2006 19:48

Re: for each Schleife in calc

Beitrag von Karolus »

Hallo

Code: Alles auswählen

...
for i = 11 to 15
   cell = sheet.getcellbyposition(0, i )
   if cell.value = 5 then
       cell.CellbackColor = rgb(172,255,47)
   end if
next i
...
Für diese Aufgabe benötigst du kein Makro, das geht besser per →Bedingter Formatierung

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)
monk77
Beiträge: 2
Registriert: So, 10.10.2010 16:43

Re: for each Schleife in calc

Beitrag von monk77 »

Hallo Karo,

mir ist bewusst, dass ich dies auch mit der bedingten Formatierung lösen kann. Ich bin gerade aber dabei von excel vba auf Oo basic umzuschwenken und daher möchte ich natürlich alles testen, was möglich ist. Ich danke Dir für Deinen Tipp und werde diesen umgehend ausprobieren. Gibt es in Oo keine for each Schleife?

edit:

Habe es auch ohne for each hinbekommen. Ich hatte nämlich noch das Problem, dass ich mehrere Spalten auf diese Weise formatieren möchte. Sicherlich könnte man den von Dir genannten code mehrmals untereinander ausführen lassen, was aber bei 100 Spalten mühsam wäre und den code aufplustern würde. Habe es jetzt so gelöst.

Code: Alles auswählen

dim cell as object
do until counter = 15
    for i = 11 to 15
       cell = sheet.getcellbyposition(counter, i )
       if cell.value = 5 then
           cell.CellbackColor = rgb(172,255,47)
       end if
    next i
counter = counter + 1
loop
Gruss
monk77
Karolus
********
Beiträge: 7532
Registriert: Mo, 02.01.2006 19:48

Re: for each Schleife in calc

Beitrag von Karolus »

Hallo
Gibt es in Oo keine for each Schleife?
Nein, nicht direkt, aber für einfache VBA-Syntax reicht evtl. die Zeile:
Option VBASupport 1
oberhalb der Sub.

Edit: for-Schleifen kann man schachteln:

Code: Alles auswählen

for counter = 0 to 15
   for i = 11 to 15
     'tu irgendwas
   next i
next counter
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)
mumpel
****
Beiträge: 133
Registriert: So, 22.08.2004 05:27
Wohnort: Lindau (B)
Kontaktdaten:

Re: for each Schleife in calc

Beitrag von mumpel »

Hallo!

Mit VBA-Code ist das kein Problem. Allerdings sollte man in OOo VBA-Code mit Bedacht einsetzen (man weiss ja nie...).

Code: Alles auswählen

Option VBASupport 1

Sub Schleife()
Dim Zelle As Range

For Each Zelle in Sheets(1).Range("A12:A16")
With Zelle
If .Value = 5 then
   .Interior.Color = RGB(172,255,47)
Else   
   .Interior.ColorIndex = xlNone
End If
End With
Next

End Sub
Gruß, René

Windows 7 Home Premium (auf Acer Desktop PC)
Windows 8 Professional (auf Microsoft Surface Pro 3).
MSO 365 Home Premium
LibreOffice 4.2.
F-Secure Internet Security
DPunch
*******
Beiträge: 1112
Registriert: Mo, 02.11.2009 16:16
Wohnort: Marburg

Re: for each Schleife in calc

Beitrag von DPunch »

Aloha
Karolus hat geschrieben:
Gibt es in Oo keine for each Schleife?
Nein, nicht direkt,
Doch, auch in OOo Basic gibt es for-each Schleifen.

Code: Alles auswählen

For Each Zelle in Sheets(1).Range("A12:A16")
Das Problem im vorliegenden Fall ist aber, dass die CellRange keine simple Auflistung von Zellen enthält.
Man kann sich also nicht pro Schleifendurchlauf einfach eine Zelle zurückgeben lassen.

Ein mögliches Anwendungsbeispiel für eine for-each Schleife:
Alle Zellen in einem Bereich blau färben, wenn sie das Wort "Hallo" enthalten.

Code: Alles auswählen

oDoc = thisComponent
oSheet = oDoc.Sheets(0)
oRange = oSheet.getCellRangeByName("A1:A16")
oSearchDesc = Sheet.createSearchDescriptor
oSearchDesc.SearchString = "Hallo"
oSearchDesc.searchWords = True
oResult = oRange.findAll(oSearchDesc)
If NOT isNull(oResult) Then
	For Each cellRange in oResult
		cellRange.CellBackColor = RGB(0,0,255)
	Next cellRange
End If
matlat
***
Beiträge: 87
Registriert: Sa, 03.03.2007 13:51

Re: for each Schleife in calc

Beitrag von matlat »

Hallo DPunch
Alle Zellen in einem Bereich blau färben,...
...RGB(0,0,255)...
hellblau
nichts für ungut
Wolfgang
Antworten