CALC: Anzahl der belegten Zeilen ermitteln

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

Moderator: Moderatoren

Benutzeravatar
oktobaer
***
Beiträge: 69
Registriert: So, 18.01.2009 23:19
Wohnort: bei Nürnberg

CALC: Anzahl der belegten Zeilen ermitteln

Beitrag von oktobaer »

Hallo!

Um die Anzahl der benutzten Zeilen zu ermitteln arbeite ich mit VBA-Befehlen:

Code: Alles auswählen

		spalte%=2
		Range(Worksheets("MDB").Cells(2,Spalte%),Worksheets("MDB").cells(2,Spalte%).End(xlDown)).select
		LetzterDatensatz%=Selection.Rows.count
Für eine nachträglich geladene Datei bräuchte ich nun noch das Workbooks("Dateiname")-Argument was OO aber nicht packt.

Wie löst Ihr dieses Thema?

Oktobaer
Servus
Claus
Benutzeravatar
oktobaer
***
Beiträge: 69
Registriert: So, 18.01.2009 23:19
Wohnort: bei Nürnberg

Re: CALC: Anzahl der belegten Zeilen ermitteln

Beitrag von oktobaer »

Hallo!

Ich habe mir eine Lösung erarbeitet.

Da es sich bei mir hier um eine Liste mit Kunden handelt (extra Tabellenblatt) - die sich nicht ständig verändert - habe ich folgende Strategie gewählt:

1.) Es gibt ein eigenes Tabellenblatt namens "Setup" - dort wird an definiertes Stelle die Anzahl der Zeilen der Kundendaten hinterlegt
2.) Zum Programmstart wird diese Variable ausgelesen und die Gültigkeit überprüft
3.) Gültigkeit liegt vor, wenn dieser Eintrag auf eine belegte Zelle verweist (letzter Eintrag) und die nächste Zeile leer ist (erster leerer Datensatz)
4.) Bei Gültigkeit wird das Ergebnis in eine globale Variable geschrieben und die Routine verlassen
5.) Sonst wird nochmals jede Zeile von Anfang an ausgelesen, solange bis die erste leere Zeile vorliegt
6.) Das gefundene Ergebnis wird fürs nächste Mal ins Setup geschrieben.

Vorteil: Wenn sich nichts verändert geht die Abfrage sehr schnell - die lange Prozedur ist nur einmalig nach Veränderung notwendig.

Code: Alles auswählen

Public KundenAnzahl%
Public DOC_A, DOC_B As Object

SUB MAIN
   Doc_B = ThisComponent
   oDesktop = createUnoService("com.sun.star.frame.Desktop")
   Url = ConvertToUrl ("C:\Daten\MDB\MDB-Daten.ods")
   dim p(0) as new com.sun.star.beans.PropertyValue
   p(0).Name = "Hidden"
   p(0).Value = true 
   Doc_A = StarDesktop.loadComponentFromURL(Url, "_default", 0, p())

   call Kundenanzahl_auslesen

END SUB
'------------------------------------------------------------------------------------------------------------------------
SUB Kundenanzahl_auslesen
'Wenn die gespeicherte Kundenanzahl stimmt, dann Ende, sonst neu bestimmen!

		call ReadSetup(KundenSatz$,5,2)
		KundenAnzahl%=val(KundenSatz$)

		if KundenAnzahl%<1 then KundenAnzahl%=1
	
		call ReadKunden(LetztDaten$,KundenAnzahl%,2)
		call ReadKunden(ErstLeer$,KundenAnzahl%+1,2)


		if (LetztDaten$<>"") and (ErstLeer$="") then exit SUB

		for zeile%=1 to 30000
			call ReadKunden(KundenDaten$,zeile%,2)
			if KundenDaten$="" then KundenAnzahl%=zeile%-1:exit for	
		next zeile%

		KundenSatz$=str$(KundenAnzahl%)
		call WriteSetup(KundenSatz$,5,2)

END SUB
'------------------------------------------------------------------------------------------------------------------------
SUB ReadSetup(text$,zeile%,spalte%)
	text$= Doc_A.Sheets.GetByName("Setup").getCellByPosition(spalte%-1,zeile%-1).string
END SUB
'------------------------------------------------------------------------------------------------------------------------
SUB WriteSetup(text$,zeile%,spalte%)
	Doc_A.Sheets.GetByName("Setup").getCellByPosition(spalte%-1,zeile%-1).string=text$
END SUB
'------------------------------------------------------------------------------------------------------------------------
SUB ReadKunden(text$,zeile%,spalte%)
	text$= Doc_A.Sheets.GetByName("Kunden").getCellByPosition(spalte%-1,zeile%-1).string
END SUB

Gibt es noch Verbesserungsvorschläge?

Oktobaer
Servus
Claus
Antworten