Puis-je créer horizontal filtre automatique dans OpenOffice Calc
-
11-12-2019 - |
Question
Le filtre automatique est de trier les données à la verticale, mais je veux filtrer les lignes horizontalement.Disons que j'ai le tableau suivant:
1 2 2 1 2
B A E F F
B D E F F
C D E F F
Ce que je peux faire est de fixer un filtre automatique et filtre uniquement les lignes contenant "B" dans la première colonne.Ce que je voudrais faire est de filtrer uniquement les lignes qui contiennent "2" (dans ce cas, les lignes sont la deuxième, la troisième et la dernière dans ce cas).
J'ai trouvé quelques informations à ce sujet.Toutes les réponses que j'ai trouvé sont contenant des macros pour faire le travail, mais ils ont été écrits pour MS Excel, et ne sont pas compatibles avec OpenOffice
Par exemple, cette macros doivent obtenir les lignes filtrées, mais ne fonctionne pas dans OpenOffice Calc:
Option Explicit
Sub horizontal_filter()
'Erik Van Geit
'060910
Dim LC As Integer 'Last Column
Dim R As Long
Dim i As Integer
Dim FilterValue As String
Const FilterColumn = 1 '1 is most logical value but you may change this
R = ActiveCell.Row
LC = Cells(R, Columns.Count).End(xlToLeft).Column
FilterValue = Cells(R, FilterColumn)
Application.ScreenUpdating = False
'to filter starting after FilterColumn
For i = FilterColumn + 1 To LC
'to filter all columns even before the filtercolumn
'For i = 1 To LC
If i <> FilterColumn Then
Columns(i).Hidden = Cells(R, i) <> FilterValue
End If
Next i
Application.ScreenUpdating = True
End Sub
Toute aide est grandement appréciée!
La solution
Vous ne pouvez pas, dans l'hypothèse d'une dépense raisonnable.Il est beaucoup plus facile de transformer vos données afin que les lignes d'obtenir des colonnes et vice versa.Donc, je vous recommande fortement de transformer les données en utilisant Paste Special
en collaboration avec le Transpose
option.Vous pouvez même le faire dynamiquement à l'aide de la TRANSPOSE()
fonction.
EDIT:
Maintenant je l'ai eu, vous voulez masquer des colonnes basé sur une certaine valeur.Ceci est possible en utilisant une macro en fait, donc ma première réponse était incorrecte - désolé pour ça!Il y a quelques macros autour de qui va le faire pour vous.Vous pouvez combiner cette solution avec un filtre automatique.Voici un solution par king_026 de l'OpenOffice.org forums (légèrement adapté à la structure de la table - voir ci-dessous):
REM ***** BASIC *****
sub hide
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 get the current column
nCol = ThisComponent.CurrentSelection.CellAddress.Column
rem set the properties for moving right
dim args2(1) as new com.sun.star.beans.PropertyValue
args2(0).Name = "By"
args2(0).Value = 1
args2(1).Name = "Sel"
args2(1).Value = false
rem make thecurrent column counter
dim cCol as integer
CCol = 0
rem goto the first column
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "ToPoint"
args1(0).Value = "$A$2"
dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args1())
rem loop until you get back to the selected cell
Do Until cCol > nCol
rem hide if the cell value is 1
if ThisComponent.CurrentSelection.string <> "" and ThisComponent.CurrentSelection.value = 1 then
rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:HideColumn", "", 0, Array())
End if
rem goto the right nad increment the column counter
dispatcher.executeDispatch(document, ".uno:GoRight", "", 0, args2())
cCol = cCol + 1
Loop
End sub
Ainsi, le tableau suivant:
ressemblera à ceci après filtre automatique sur Col1 et après la macro a fait son travail: