Spezialfilter

Submitted by Erik Wegner on
Body

Beschreibung

In einer Datei gibt es ein Blatt mit einer Liste. Diese Liste soll durch den Aufruf Daten, Spezialfilter gefiltert werden. Das Filterkriterium soll dynamisch aus einer Zelle gelesen werden.

Quellcode

sub do_specialfilter
	'structure for address
	dim outputaddr as new com.sun.star.table.CellAddress
	'the source range of data to be filtered
	xfilter = thiscomponent.sheets(1).getcellrangebyname("A1:G32000") 
	'the filter rules are set up in this
	xfilterDesc=xFilter.createFilterDescriptor(true)
	
	'we take the value each row is to be compared with from a special location
	qSheet = ThisComponent.Sheets(0)
	filterWert$ = qSheet.getCellRangeByName("A2").getValue()
	
	call clearCells 'Clear output cells
	
	outputaddr.sheet = 0  'set up output location as a cell address NOT a range
	outputaddr.column=0  ' "A4" - col 0
	outputaddr.row=3     ' "A4" - row 3
	
	' The filter specs are set up as an array (one element in this example) set the dimension accordingly
	dim aFilterFields(0)  as  new com.sun.star.sheet.TableFilterField
	' set the filter rules up (one element per column)
	aFilterFields(0).Field        = 3 ' field to be compared (starts at zero)
	
	'the following lines for numeric comparison
	'aFilterFields(0).IsNumeric    = true ' numeric comparison
	'aFilterFields(0).Operator     = com.sun.star.sheet.FilterOperator.LESS_EQUAL
	'aFilterFields(0).NumericValue =  filterWert ' value each row is to be compared with
	
	'these lines for string comparison
	aFilterFields(0).IsNumeric    = false ' character (string) comparison
	aFilterFields(0).Operator     = com.sun.star.sheet.FilterOperator.LESS_EQUAL
	aFilterFields(0).StringValue =  filterWert$ ' value each row is to be compared with
	
	' set the filter description up
	xFilterDesc.setFilterFields(aFilterFields()) 'set the filter rules by assigning the array of fields
	xfilterDesc.ContainsHeader=true  'there is a header line for the range to be filtered
	xfilterDesc.CopyOutputData=true    ' output to a separate location
	xfilterDesc.OutputPosition=outputaddr  ' this is the output location
	
	xFilter.filter(xFilterDesc)  'do the filter operation
	
end sub

sub clearCells
	rem ----------------------------------------------------------------------
	rem define variables
	dim document   as object
	dim dispatcher as object
	rem ----------------------------------------------------------------------
	rem get access to the document
	document   = ThisComponent.CurrentController.Frame
	dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
	
	rem ----------------------------------------------------------------------
	dim args1(0) as new com.sun.star.beans.PropertyValue
	args1(0).Name = "ToPoint"
	args1(0).Value = "Auswahl.$A$4:$A$32000" 'Auswahl is the sheet's name
	
	dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args1())
	
	rem ----------------------------------------------------------------------
	rem dispatcher.executeDispatch(document, ".uno:Delete", "", 0, Array())
	
	rem ----------------------------------------------------------------------
	dim args3(0) as new com.sun.star.beans.PropertyValue
	args3(0).Name = "Flags"
	args3(0).Value = "R"
	
	dispatcher.executeDispatch(document, ".uno:DeleteCell", "", 0, args3())
	
end sub