LibreOffice, включающий фильтр в макрос
Я пытаюсь сделать это в течение двух дней: работаю на Mac с LibreOffice 5.4.
У меня есть CSV-файл с несколькими встречами, датами и т. Д. Что мне нужно, чтобы этот файл делал при открытии, это фильтрация всех встреч за сегодня. Что у меня есть, так это то, что я проверяю каждую строку и добавляю 1
до последней строки, если она соответствует или добавить 0
если сегодня не будет дня
На самом деле я записал свои действия, поэтому мой текущий макрос не является оптимальным, поэтому я не публикую его.
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
в последнем ряду?
1 ответ
Запись обычно не является хорошим способом изучения или написания макросов. Вместо этого найдите примеры и документацию онлайн. Поиск в Google для 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, адаптированный из листинга 5 страницы Фильтры руководства пользователя OpenOffice.
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
Результат: