Witam
Proszę o wskazówki jak w makro używać filtrów. Po wykonywaniu makra jest możliwość filtrowania ręcznie, a czy jest możliwe by makro wykonało to za użytkownika?
W załączniku screen i plik z makrem.
Tabela przestawna jak użyć filtrów w makro
Tabela przestawna jak użyć filtrów w makro
- Załączniki
-
- Test.ods
- (18.03 KiB) Pobrany 184 razy
Libreoffice 6.0.4.2 Windows 10/ Ubuntu 18.04 Libreoffice 6.0.4.2
Re: Tabela przestawna jak użyć filtrów w makro
Zamiast wskazówek dostajesz gotowe makro.szlejk pisze:Proszę o wskazówki jak w makro używać filtrów.
Kod: Zaznacz cały
Sub Tabela_Terminy
Dim FileProperties(1) As New com.sun.star.beans.PropertyValue
Dim FilterFields(2) as New com.sun.star.sheet.TableFilterField
Dim Doc As Object
Dim Sheet As Object
Dim Row As Object
Dim Col As Object
Dim Col2 As Object
Dim I As Integer
Const SColumns = "A,B,E,G,H,I,J,K" 'ascending
ThisComponent.Sheets(0).Rows.removeByIndex(wiersz, 1)
aColumns = Split(SColumns,",")
oSheet = ThisComponent.CurrentController.ActiveSheet
for i = uBound(aColumns) to 0 step -1
oColumn = oSheet.Columns.getbyname(aColumns(i))
oColumn.Columns.removebyindex(0,1)
next i
doc = ThisComponent
sheetName1 = "Tabela"
If doc.Sheets.hasByName(sheetName1) THEN
doc.Sheets.removeByName(sheetName1)
END If
doc.Sheets().insertNewByName(sheetName1, 1)
datasheet = doc.Sheets.getByName("Arkusz1")
sheet1 = doc.Sheets.getByName("Tabela")
oController = doc.CurrentController
oController.setActiveSheet(datasheet)
oSheetObj = oController.ActiveSheet
DataCellRange = osheetObj.getCellRangeByName("A1:G12")
RangeAddress = DataCellRange.RangeAddress
oController.setActiveSheet(sheet1)
oSheetObj = oController.ActiveSheet
Tables = oSheetObj.DataPilotTables()
Descriptor = Tables.createDataPilotDescriptor()
Descriptor.ShowFilterButton = True
Descriptor.DrillDownOnDoubleClick = True
Descriptor.setSourceRange(RangeAddress)
Fields = Descriptor.getDataPilotFields
Field1 = Fields.getByIndex(2)
Field1.Orientation = com.sun.star.sheet.DataPilotFieldOrientation.ROW
Field2 = Fields.getByIndex(0)
Field2.Orientation = com.sun.star.sheet.DataPilotFieldOrientation.ROW
Field3 = Fields.getByIndex(1)
Field3.Orientation = com.sun.star.sheet.DataPilotFieldOrientation.ROW
'Field3.Function = com.sun.star.sheet.GeneralFunction.SUM
Field4 = Fields.getByIndex(4)
Field4.Orientation = com.sun.star.sheet.DataPilotFieldOrientation.PAGE
'Field4.Function = com.sun.star.sheet.GeneralFunction.SUM
Field5 = Fields.getByIndex(3)
Field5.Orientation = com.sun.star.sheet.DataPilotFieldOrientation.DATA
Field5.Function = com.sun.star.sheet.GeneralFunction.SUM
Field6 = Fields.getByIndex(5)
Field6.Orientation = com.sun.star.sheet.DataPilotFieldOrientation.PAGE
Field7 = Fields.getByIndex(6)
Field7.Orientation = com.sun.star.sheet.DataPilotFieldOrientation.PAGE
Descriptor.RowGrand = "true"
Cell = oSheetObj.getCellrangeByName("A2")
Tables.insertNewByName("NewDataPilot", Cell.CellAddress, Descriptor)
Table = Tables.getByName("NewDataPilot")
Descriptor = Table.getFilterDescriptor
FilterFields(0).Field = 3
FilterFields(0).Operator = com.sun.star.sheet.FilterOperator.NOT_EQUAL
FilterFields(0).IsNumeric = True
FilterFields(0).NumericValue = 99
FilterFields(1).Field = 3
FilterFields(1).Operator = com.sun.star.sheet.FilterOperator.NOT_EQUAL
FilterFields(1).IsNumeric = True
FilterFields(1).NumericValue = 109
FilterFields(1).Connection = com.sun.star.sheet.FilterConnection.AND
FilterFields(2).Field = 3
FilterFields(2).Operator = com.sun.star.sheet.FilterOperator.NOT_EQUAL
FilterFields(2).IsNumeric = True
FilterFields(2).NumericValue = 119
FilterFields(2).Connection = com.sun.star.sheet.FilterConnection.AND
Descriptor.FilterFields = FilterFields
Col2 = sheet1.Columns(4)
Col2.Width = (10)
For I = 0 To 3
Col = sheet1.Columns(I)
Col.OptimalWidth = true
Next I
Row = sheet1.Rows()
Row.OptimalHeight = true
sheet1.isTextWrapped = true
End Sub
Pytanie do admina.
Dlaczego ten wątek nie pojawił się w aktywnych? Osobiście uważam że każdy temat powinien się tam pojawiać, zwiększając możliwości udzielenia pomocy.
LibreOffice 5.1.2.2 Ubuntu 16 LTS
Re: Tabela przestawna jak użyć filtrów w makro
Dziękuję bardzo za pomoc. Makro jest zbieraniną kilku makr które połączyłem ze sobą, i wiem że nie udolnie. Moja wiedza jest znikoma i tu prośba o wskazówki co do poprawienia efektywności makra.W kilku miejscach aktywujesz arkusze po to żeby pobrać dane, które możesz wyciągnąć bez tej czynności, ewentualnie na końcu makra to wstawić żeby aktywować arkusz z tabelą. Zyska na tym szybkość wykonywania makra.
Pozdrawiam i dziękuje
Libreoffice 6.0.4.2 Windows 10/ Ubuntu 18.04 Libreoffice 6.0.4.2