Ausblenden beschleunigen

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

Moderator: Moderatoren

Finger12
Beiträge: 3
Registriert: Fr, 13.10.2017 13:41

Ausblenden beschleunigen

Beitrag von Finger12 »

Habe ein Makro zum ausblenden vonZeilen mit bestimmtem Inhalt. Leider geht dies immer einige Sekunden. Gibt es eine Möglichkeit meinen Code zu "tunen"

Code: Alles auswählen

Sub Ausblenden

thisComponent.lockControllers

with thisComponent.sheets().getbyname("Tabelle1")						
   for zi = 47 to 2042
   if .getcellbyposition(5,zi).string = "0.00" or .getcellbyposition(1,zi).string = "Text" or .getcellbyposition(5,zi).string = "xxx"  then
    .rows(zi).isvisible = FALSE
   end if
   next

end with     

ThisComponent.unlockControllers

End Sub
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Ausblenden beschleunigen

Beitrag von Stephan »

das hier dürfte schneller sein:

Code: Alles auswählen

Sub ausblenden_neu()
	daten = ThisComponent.sheets().getbyname("Tabelle1").getCellrangeByPosition(1,47,5,2042).getDataArray
	
	For i = 0 To UBOUND(daten())
		If daten(i)(4) = "0.00" OR daten(i)(0) = "Text" OR daten(i)(4) = "xxx" Then
			ii = i + 47
			ThisComponent.sheets().getbyname("Tabelle1").rows(ii).IsVisible = false
		End If
	Next i
	Msgbox "Fertig"
End Sub

Gruß
Stephan
Finger12
Beiträge: 3
Registriert: Fr, 13.10.2017 13:41

Re: Ausblenden beschleunigen

Beitrag von Finger12 »

Hallo Stephan

Danke für deine Lösung.
Leider dauert der Vorgang damit noch länger als bisher. (9 Sekunden statt 6 Sekunden)

Ich denke ich werde alles so lassen wie bis anhin und mich mit der Verzögerung abfinden.

Gruss
Finger12
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Ausblenden beschleunigen

Beitrag von Stephan »

Leider dauert der Vorgang damit noch länger als bisher. (9 Sekunden statt 6 Sekunden)
Beide Zeiten sind unfasslich lang.

Versuche das Folgende, das dauert bei mir ca. 0,4 s:

Code: Alles auswählen

Sub ausblenden_neu2()

	daten = ThisComponent.sheets().getbyname("Tabelle1").getCellrangeByPosition(1,47,5,2042).getDataArray
	oRanges = ThisComponent.createInstance("com.sun.star.sheet.SheetCellRanges")
	
	For i = 0 To UBOUND(daten())
		If daten(i)(4) = "0.00" OR daten(i)(0) = "Text" OR daten(i)(4) = "xxx" Then
			ii = i + 47
			'ThisComponent.sheets().getbyname("Tabelle1").rows(ii).IsVisible = false
			oRange = ThisComponent.sheets().getbyname("Tabelle1").getCellByPosition(0,ii)
			oRanges.addRangeAddress(oRange.RangeAddress,False)
		End If
	Next i
	ThisComponent.CurrentController.select(oRanges)
	
	document   = ThisComponent.CurrentController.Frame
	dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
	dispatcher.executeDispatch(document, ".uno:HideRow", "", 0, Array())

	Msgbox "Fertig"
End Sub
Gruß
Stephan
Finger12
Beiträge: 3
Registriert: Fr, 13.10.2017 13:41

Re: Ausblenden beschleunigen

Beitrag von Finger12 »

Wow damit ist es wirklich blitzschnell.

Vielen Dank.
Antworten