2017-09-01 32 views
0

私はこれを2日間続けようとしています: MacでLibreOffice 5.4を使って作業しています。マクロにフィルタを含むLibreOffice

私は、複数の予定、日付などを含む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

まずあなたが助けあなたのコードと何をしようとしている(それは完璧ではない、間違っている場合でも、または何か)ので、誰を追加する必要がありますが、何かにしていますと連携。 (2)CSVファイル内にマクロを持つことはできません(データのみを保存することができます)。 (3)できる場合は、シートのスクリーンショットも提供してください。どのデータがどの列にあるかを知ることができれば、「*今日のすべての予定をフィルタリングする*」のようなものを理解する方がはるかに簡単です。 –

+0

私のコードを追加しました。私の投稿には、csv-fileの画像があります。 –

+0

画像が小さすぎて読み込めません。 –

答えて

0

記録は通常、マクロの学習や書き込みには適していません。代わりに、例とオンラインドキュメントをオンラインで見つけてください。 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は、OpenOffice User Guide Filters pageのリスト5から適応、1であるものを除いてすべての行を非表示にするマクロです。

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 

結果:すべての

filtered result

関連する問題