0

我现在正在尝试这样做两天:使用 LibreOffice 5.4 在 Mac 上工作。

我有几个约会、日期等的 CSV 文件。我需要这个文件在打开时做的是过滤今天的所有约会。到目前为止,我检查每一行,1如果匹配则添加到最后一行,如果0不是今天,则添加 a。

实际上我记录了我的动作,所以我当前的宏不是最佳的,这就是我不发布它的原因。

https://picload.org/thumbnail/rwwiiaaa/image.jpg 这是一张桌子一部分的图片。到目前为止,这是我的宏:

sub csvfilter
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 = "$AI$1"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args1())

rem ----------------------------------------------------------------------
dim args2(0) as new com.sun.star.beans.PropertyValue
args2(0).Name = "StringName"
args2(0).Value = "=TEXT(TODAY();"+CHR$(34)+"YYYY-MM-DD"+CHR$(34)+")"

dispatcher.executeDispatch(document, ".uno:EnterString", "", 0, args2())

rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:JumpToNextCell", "", 0, Array())

rem ----------------------------------------------------------------------
dim args4(0) as new com.sun.star.beans.PropertyValue
args4(0).Name = "StringName"
args4(0).Value = "=IF(AI$1=LEFTB(C2;10);"+CHR$(34)+"1"+CHR$(34)+";"+CHR$(34)+"0"+CHR$(34)+")"

dispatcher.executeDispatch(document, ".uno:EnterString", "", 0, args4())

rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:JumpToNextCell", "", 0, Array())

rem ----------------------------------------------------------------------
dim args6(0) as new com.sun.star.beans.PropertyValue
args6(0).Name = "ToPoint"
args6(0).Value = "$AI$2"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args6())

oSheet = thisComponent.sheets(0)
ocursor = oSheet.createCursor()
ocursor.gotoStart() 
ocursor.gotoEndofUsedArea(false)

rem ----------------------------------------------------------------------
dim args7(0) as new com.sun.star.beans.PropertyValue
args7(0).Name = "EndCell"
args7(0).Value = "$AI" & ocursor.getRangeAddress.endRow+1

dispatcher.executeDispatch(document, ".uno:AutoFill", "", 0, args7())

rem ----------------------------------------------------------------------
dim args8(0) as new com.sun.star.beans.PropertyValue
args8(0).Name = "ToPoint"
args8(0).Value = "$AI$2:$AI$18"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args8())

rem ----------------------------------------------------------------------
dim args9(0) as new com.sun.star.beans.PropertyValue
args9(0).Name = "ToPoint"
args9(0).Value = "$AI$1"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args9())

rem ----------------------------------------------------------------------
rem dispatcher.executeDispatch(document, ".uno:DataFilterStandardFilter", "", 0, Array())

rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:FilterExecute", "", 0, Array())
end sub

我的问题是,如何在宏内部过滤1最后一行中的 s?

4

1 回答 1

0

录制通常不是学习或编写宏的好方法。相反,请在线查找示例和文档。搜索谷歌openoffice macro filter会带来很多有用的结果。

假设电子表格看起来像这样。

A   B   C
~~  ~~  ~~
1   A   AA
0   B   BB
0   C   CC
1   D   DD
1   E   EE
1   F   FF
0   G   GG
0   H   HH
1   I   II
0   J   JJ

这是隐藏除 A 列为 1 之外的所有行的宏,改编自OpenOffice 用户指南过滤器页面的清单 5 。

Sub SimpleSheetFilter()
  Dim oSheet  ' Sheet that will contain the filter.
  Dim oFilterDesc  ' Filter descriptor.
  Dim oFields(0) As New com.sun.star.sheet.TableFilterField
  oSheet = ThisComponent.getSheets().getByIndex(0)
  oFilterDesc = oSheet.createFilterDescriptor(True)
  With oFields(0)
    .Field = 0  ' Column A
    .IsNumeric = True
    .NumericValue = 1
    .Operator = com.sun.star.sheet.FilterOperator.EQUAL
  End With
  oFilterDesc.setFilterFields(oFields())
  oSheet.filter(oFilterDesc)
End Sub

结果:

过滤结果

于 2017-09-09T09:06:36.063 回答