Macros 我可以在OpenOffice Calc中创建水平自动筛选吗

Macros 我可以在OpenOffice Calc中创建水平自动筛选吗,macros,openoffice-calc,openoffice-basic,Macros,Openoffice Calc,Openoffice Basic,自动筛选是垂直排序数据,但我想水平筛选行。 假设我有下表: 1 2 1 2 B A E F F B D E F F C D E F 我可以做的是设置一个自动筛选,只筛选第一列中包含“B”的行。我想做的是只过滤包含“2”的行(在本例中,行是第二行、第三行和最后一行) 我发现了一些关于这件事的信息。我找到的所有答案都包含一些宏来完成工作,但它们是为MS Excel编写的,与OpenOffice不兼容 例如,此宏应过滤行,但在OpenOffice Calc中不起作用: Option Explicit

自动筛选是垂直排序数据,但我想水平筛选行。 假设我有下表:

1 2 1 2

B A E F F

B D E F F

C D E F

我可以做的是设置一个自动筛选,只筛选第一列中包含“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
选项显式
亚水平滤波器()
埃里克·范盖特
'060910
Dim LC作为整数的最后一列
变暗,变长
作为整数的Dim i
作为字符串的Dim FilterValue
Const FilterColumn=1'1是最符合逻辑的值,但您可以更改此值
R=ActiveCell.Row
LC=单元格(R,Columns.Count).End(xlToLeft).Column
FilterValue=单元格(R,FilterColumn)
Application.ScreenUpdating=False
'在FilterColumn之后开始筛选
对于i=过滤柱+1至LC
'甚至在筛选列之前筛选所有列
'对于i=1到LC
如果我过滤柱那么
列(i).隐藏=单元格(R,i)FilterValue
如果结束
接下来我
Application.ScreenUpdating=True
端接头

非常感谢您的帮助

在合理费用的假设下,你不能。只需转换数据,使行得到列,反之亦然,就容易多了。因此,我强烈建议使用
Paste Special
Transpose
选项来转换数据。您甚至可以通过使用
TRANSPOSE()
函数动态执行此操作

编辑:

现在我明白了-您希望基于某个值隐藏列。事实上,这是可以使用宏的,所以我的第一个答案是不正确的-抱歉!周围有一些宏可以为您执行此操作。您可以将这样的解决方案与自动过滤器相结合。下面是一个(稍微适应表格结构-见下文):

REM****BASIC*****
子皮
雷姆----------------------------------------------------------------------
rem定义变量
将文档变暗为对象
dim dispatcher作为对象
雷姆----------------------------------------------------------------------
rem可以访问该文档
文档=ThisComponent.CurrentController.Frame
dispatcher=createUnoService(“com.sun.star.frame.DispatchHelper”)
rem获取当前列
nCol=ThisComponent.CurrentSelection.CellAddress.Column
rem设置向右移动的属性
将args2(1)调整为新的com.sun.star.beans.PropertyValue
args2(0)。Name=“由”
args2(0)。值=1
args2(1)。Name=“Sel”
args2(1)。值=false
rem使当前列计数器
作为整数的dim cCol
CCol=0
rem转到第一列
将args1(0)调整为新的com.sun.star.beans.PropertyValue
args1(0)。Name=“ToPoint”
args1(0)。Value=“$A$2”
dispatcher.executeDispatch(文档“.uno:GoToCell”,”,0,args1())
rem循环,直到返回选定的单元格
直到cCol>nCol为止
如果单元格值为1,则rem隐藏
如果ThisComponent.CurrentSelection.string“”和ThisComponent.CurrentSelection.value=1,则
雷姆----------------------------------------------------------------------
dispatcher.executeDispatch(文档“.uno:HideColumn”,”,0,数组())
如果结束
rem转到右侧并增加列计数器
dispatcher.ExecutedDispatch(文档“.uno:GoRight”,”,0,args2())
cCol=cCol+1
环
端接头
因此,下表:

在Col1上的Autofilter和宏完成其工作后,将如下所示:


是否要显示第一行?还是第二、第三和第五栏?或者第二、第三和第五行,基于列中的信息?+1-我不同意“你不能”部分,但我同意转置是通往goWell的方法,我不能这么做。原因是,在同一时刻,我需要有两个过滤器-一个水平和一个垂直。因此,如果我转换数据,使行得到列,反之亦然,我仍然无法进行两种方式的筛选。感谢您回复Huwawohu。在我问题的示例表中,我想垂直和水平地过滤数据,这样我可以得到第一列中有“B”的所有行和第一行中有“2”的所有列。“自动筛选”可以很好地筛选行,但在筛选行之后,我只想得到顶行有“2”的列。@StefanEroteev:好的,现在我知道了。我删除了之前的评论,并在回答中添加了一些代码。@deathApril:你是对的——“你不能”绝对是错的:)