Могу ли я создать горизонтальный автофильтр в OpenOffice Calc?

StackOverflow https://stackoverflow.com//questions/10653319

Вопрос

Автофильтр сортирует данные по вертикали, но я хочу фильтровать строки по горизонтали.Допустим, у меня есть следующая таблица:

1 2 2 1 2

Б А Е Ф Ф

Б Г Д Е Ж Ж

В Г Д Е Ж Ф

Что я могу сделать, так это установить автофильтр и фильтровать только строки, содержащие букву «B» в первом столбце.Я хотел бы фильтровать только те строки, которые содержат «2» (в данном случае это вторая, третья и последняя строки).

Я нашел некоторую информацию по этому вопросу.Все ответы, которые я нашел, содержат макросы для выполнения работы, но они были написаны для MS Excel и несовместимы с OpenOffice.

Например, этот макрос должен фильтровать строки, но он не работает в 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

Любая помощь очень ценится!

Это было полезно?

Решение

Вы не можете, при условии разумных затрат.Гораздо проще просто преобразовать данные так, чтобы строки получили столбцы, и наоборот.Поэтому я настоятельно рекомендую преобразовать данные с помощью Paste Special вместе с Transpose вариант.Вы даже можете сделать это динамически, используя TRANSPOSE() функция.

РЕДАКТИРОВАТЬ:

Теперь я понял - ты хочешь скрыть столбцы на основе определенного значения.На самом деле это возможно с использованием макроса, поэтому мой первый ответ был неправильным — извините!Есть несколько макросов, которые сделают это за вас.Вы можете совместить такое решение с автофильтром.Вот решение king_026 с форумов OpenOffice.org (немного адаптировано к структуре таблицы - см. ниже):

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

Итак, следующая таблица:

calc1

будет выглядеть так после автофильтра на Col1 и после того, как макрос выполнил свою работу:

calc

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top