Bereich prüfen

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

Moderator: Moderatoren

toni
***
Beiträge: 66
Registriert: Mi, 03.01.2007 10:26

Bereich prüfen

Beitrag von toni »

Hi,

ich möchte in einem Bereich (z.B. A1:D1) prüfen, ob alle Zellen mit Werten gefüllt sind. Falls dies nicht der Fall ist, sollen alle Werte in diesem Bereich gelöscht werden.

In VBA sieht das folgendermaßen aus:

Code: Alles auswählen

 bereich = Range(Cells(1, 1), Cells(1, 4))
 If WorksheetFunction.CountBlank(bereich) > 0 Then
    bereich1.ClearContents
 End If
Wie sähe das in StarBasic aus?
Bei Michael Dannenhöfer (http://xn--dannenhfer-kcb.de/faqstarbas ... nden..html)
habe ich gelesen, dass man in Starbasic auf Calc-Funktionen zugreifen kann.
Mit der CountBlank-Funktion habe ich das aber nicht hin bekommen, da ich den Bereich nicht als Argument übergeben konnte.

Gruss

Thomas
Toxitom
********
Beiträge: 3769
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Beitrag von Toxitom »

Hey Thomas,

hmm, also das mit dem Inhalt einer Zelleist so eine Sache... Eine Zelle kann Texte, Zahlen oder Formeln enthalten - das sind schon mal drei verschiedene Inhalte. Auch ein Leerzeichen wäre ja ein Textinhalt - wenn gleich die Zelle leer erscheint.
Ist also nicht ganz so einfach. OOo bietet via API eine Möglichkeit, den Typ des Zellinhaltes zu prüfen:
oZelle.getType() -> liefert 0, wenn die Zell leer ist (wirklich leer!) und entsprechend andere Werte, wenn etwas drin steht. Du könntest deine Prüfung also sogar auf Inhaltstypen ausdehnen.

Nun zu deinem Punkt: Wahrscheinlich müsstest du eine Schleife über alle Zellen des Bereiches fahren und gegen den Typ 0 testen - gibt es keine mit dem Typ, sind alle Zellen gefüllt - ansosnten ist mindestens eine leer:

Code: Alles auswählen

oBereich = oSheet.getCellRangeByPosition(0, 0, 2,2) 'Zelle A1 bis C3
For i = 0 to 3
  For j = 0 to 3
     if oSheet.getCellByPosition(i, j).getType() = 0 then
           oBereich.ClearContents(511)
           exit For
     end if
   next
next
Klar, für die Zahlen kannst du natürlich auch Variable nehmen.
Und die 511 löscht dir wirklich alles - auch die Formate etc. Da musst du eben eventuell anpassen:-)

Viele Grüße
Thomas
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
toni
***
Beiträge: 66
Registriert: Mi, 03.01.2007 10:26

Beitrag von toni »

Hallo Thomas,

danke für diese Lösung.
Ich hatte eigentlich vor, die CountBlank-Funktion aus Calc ein zu binden. Vor allem um zu erfahren, wie man grundsätzlich Calc-Funktionen ein bindet und wie man die Argumente übergibt. Aber so geht es natürlich auch.

Gruss

Thomas
kannenklaus
*****
Beiträge: 319
Registriert: Mi, 14.12.2005 08:08
Wohnort: freising - oder dort, wo das bier herkommt

Beitrag von kannenklaus »

hallo thomas,
Vor allem um zu erfahren, wie man grundsätzlich Calc-Funktionen ein bindet und wie man die Argumente übergibt.
schau mal hier:

http://www.starbasicfaq.de/WiekannmanFu ... nden..html

grüße klaus
toni
***
Beiträge: 66
Registriert: Mi, 03.01.2007 10:26

Beitrag von toni »

Hallo Klaus,

die Seite habe ich mir bereits angeschaut.
In meinem ersten Beitrag hatte ich geschrieben, dass ich aber nicht weiß, wie ich dabei den Bereich (A1:D1) syntaktisch übergeben muss.

Gruss

Thomas
kannenklaus
*****
Beiträge: 319
Registriert: Mi, 14.12.2005 08:08
Wohnort: freising - oder dort, wo das bier herkommt

Beitrag von kannenklaus »

hallo thomas


du kannst auf dem code von thomas aufbauen versuch es mal so:

Code: Alles auswählen

Sub DeinMacro
Dim aktivesBlatt
Dim oCell as Object
aktivesBlatt = thisComponent.CurrentController.getActiveSheet

	For i = 0 to 3 
	  For j = 0 to 3 
		oCell=aktivesBlatt.getCellByPosition(i, j)
	'	oCell.value =10 'schreibt die Zahl 10 in die Zelle
		oCell.'deine Funktionsanweisung an diese Zelle übergeben
	   next 
	next

end Sub
grüße

klaus
Antworten