Fórum pro uživatele kancelářského balíku OpenOffice | LibreOffice
 

#1 12. 2. 2022 13:25:47

tanner5
Člen
Registrace: 18. 4. 2020
Příspěvků: 44

Filtr pomocí makra VYŘEŠENO

Dobrý den všem,
mám takový dotázek... Potřeboval bych filtrovat data z tabulky.

Tabulka má 24 slupců, A1:Yxxx.....Potřeboval bych vyfiltrovat data ze sloupce 14, jedná se o datum,
způsobem, že pokud zadám datum, vypíše mi výsledky které jsou rovny případně větší.

Zkošel jsem toto, ale moc se mi to nedaří zprovoznit sad

Nevím, jestli nevadí že nejsou vyplněny všechny sloupce případně řádky v tabulce. Některé jsou prázdné.

Potřebuji vypsat data na jiný list, ale to je v pohodě, zatím mám jen testovací odkaz pod tabulkou pro kontrolu.
Budu rád za každé nakopnutí nebo radu, děkuji.

Sub Filtr
    doc    =    thisComponent
    Sheets    =    ThisComponent.getSheets()
    list    =    Sheets.getByName("databaze")
    oblast = list.getCellRangeByName("A1:y200")
    dim podminka(0) as New com.sun.star.sheet.TableFilterField
    podminka(0).Field = 11
    podminka(0).Operator = com.sun.star.sheet.FilterOperator.GREATER_EQUAL
    podminka(0).IsNumeric = false
    podminka(0).StringValue = "30.6.2020"
    prefiltruj = oblast.createFilterDescriptor(True)
    prefiltruj.setFilterFields(podminka())
    prefiltruj.CopyOutputData = True
    prefiltruj.OutputPosition = list.getCellRangeByName("a50").CellAddress
    prefiltruj.SkipDuplicates = false
    oblast.Filter(prefiltruj)
End Sub

Děkuji

Editoval tanner5 (16. 2. 2022 21:51:37)

Offline

#2 12. 2. 2022 16:08:37

ludviktrnka
Člen
Registrace: 9. 7. 2009
Příspěvků: 670

Re: Filtr pomocí makra VYŘEŠENO

nevím jaké jsou všechny možnosti, ale když filtruji datum, tak posuzuiji všechny hodnoty data samostatně takto podminka(0).NumericValue = DateSerial(D(0),D(1),D(2)) přičemž v matici D mám (0)rok, (1) měsíc, (2) den, operátor grater_equal je OK. Určitě vám tam nebude fungovat StringValue - zkuste pohledat něco jako DateValue ...


EDIT: v prohledávaném sloupci mám normáně datumy "1.1.2022" jen to kritérium mám zapsáno bokem v té rozložené formě.



EDIT2: jo a .isNumeric = True

Editoval ludviktrnka (12. 2. 2022 16:19:21)


LibreOffice 6.2.

Offline

#3 12. 2. 2022 19:18:09

tanner5
Člen
Registrace: 18. 4. 2020
Příspěvků: 44

Re: Filtr pomocí makra VYŘEŠENO

Já mám právě datumy zapsány jen jako běžný text

Offline

#4 12. 2. 2022 20:02:02

ludviktrnka
Člen
Registrace: 9. 7. 2009
Příspěvků: 670

Re: Filtr pomocí makra VYŘEŠENO

tak v tom případě zkuste .Operator = com.sun.star.sheet.FilterOperator.EQUAL, protože text asi nemůže být gerater nebo less


LibreOffice 6.2.

Offline

#5 12. 2. 2022 22:09:01

tanner5
Člen
Registrace: 18. 4. 2020
Příspěvků: 44

Re: Filtr pomocí makra VYŘEŠENO

Ha, tak to znamená poupravit vše sad Právě potřebuji při filtrování datum od a výše ... to by s Equalem nefungovalo, ten najde jen schodu jestli se nepletu.
No a teď se tedy zeptám jako úplný tatar big_smile Ale zase jsem chvíli nic nezkoumal a předělávám starou věc....
Mám v dialogovém okně 2 pole datum ... hodnoty z těchto polí ukládám do buněk v listu,
ale momentálně pomocí string a text, jak tedy upravit aby se mi datum ukládal do sešitu ve formátu datum.
Buď jsem tatar nebo se mi to vykouřilo.... tak nějak date.value ale....

date_od        =    list.getCellByPosition(13,r)
date_od.string    =    oDialog1.model.date_od.text

jen pro pochopení a ukázku smile
Děkuji

Offline

#6 13. 2. 2022 10:41:40

ludviktrnka
Člen
Registrace: 9. 7. 2009
Příspěvků: 670

Re: Filtr pomocí makra VYŘEŠENO

Zkusete si projít tuto stránku. https://wiki.openoffice.org/wiki/Docume … e_Library) . Datum byť zadané jako string se převede do date value pokud je proměná typu date "dim date_od as date"


LibreOffice 6.2.

Offline

#7 13. 2. 2022 11:08:29

kamlan
Člen
Registrace: 15. 9. 2016
Příspěvků: 368

Re: Filtr pomocí makra VYŘEŠENO

Pozor, to číslování slopců v příkazu podminka(0).Field=11 jde od nuly, takže sloupec A=0, B=1, C=2 atd. -> pro hodnotu 11 kterou tam máte to vychází na sloupec L. Takže po zadání správného sloupce mi to vaše makro funguje v pohodě a vyfiltruje datumy >=.


Co se týká toho datumu do buňky, tak nastavujete 2 vlastnosti buňky, do Value dáte hodnotu datumu jako typ Date, a do NumberFormat o jakou kategorii formátu jde, 37 je DD.MM.YYYY.

Když si ve Formát buněk/ Čísl/ Kategorie nastavíte nějakou hodnotu, tak ta se ukládá právě do vlastnosti NumberFormat, takže třeba přes XRay pak snadno zjistíte potřebné číslo pro nastavenou hodnotu.

Jinak kdybyste datum v buňce nastavoval přes String="12.2.2023" a nikoliv Value, tak si Libre z mně neznámého důvodu před řetězec přidá znak ' a pak to nefunguje pořádně.

Sub datumDoBunky
	dim bunka as object
    bunka=ThisComponent.Sheets(0).getCellRangeByName("D2")
    with bunka
		.Value=CDate("12.2.2023") 'bacha musí být právě konverze na typ proměnné Date
		.NumberFormat=37 'formát buňky DD.MM.YYYY
	end with
End Sub

Editoval kamlan (13. 2. 2022 11:08:55)

Offline

#8 13. 2. 2022 11:28:21

tanner5
Člen
Registrace: 18. 4. 2020
Příspěvků: 44

Re: Filtr pomocí makra VYŘEŠENO

Vyzkouším , a případně pošlu vzor tabulky , jen musím upravit, mám tam skutečná data ,tak jen přepisu. Ale nastavím formát date a uvidím, právě ukládám zatím datum jako string a právě toho apostrofů jsem si všiml, ono mi to právě vyfiltrovalo jen některá data . Takže zkusím a uvidím ☺️, pak budu muset přidat ještě jednu podmínku,ale to by už nemělo být tak hrozne.
Zatím moc děkuji za rady

Offline

#9 13. 2. 2022 14:52:19

tanner5
Člen
Registrace: 18. 4. 2020
Příspěvků: 44

Re: Filtr pomocí makra VYŘEŠENO

Nebo mne pak napadla ještě jedna možnost, před zadáním příkazu na filtrování nahradit apostrof tečkou pomoci najít a nahradit, pak by se mělo chovat jako datum

Offline

#10 13. 2. 2022 15:04:30

ludviktrnka
Člen
Registrace: 9. 7. 2009
Příspěvků: 670

Re: Filtr pomocí makra VYŘEŠENO

nebo pomocný sloupec =value(A1), poté sloupec vložit jinak zpět na originální pozici jako hodnoty. S hledáním apostrofu je trochu potíž.


LibreOffice 6.2.

Offline

#11 13. 2. 2022 15:25:06

tanner5
Člen
Registrace: 18. 4. 2020
Příspěvků: 44

Re: Filtr pomocí makra VYŘEŠENO

To by také asi šlo .... Ono jsem tady prohledal fórum a ono s tím datumem u oo je malinko potíž, a právě ona se hledá tečka a nahrazuje tečkou co jsem pochopil. Nebo by teoreticky mohlo jít udělat pomocný sloupec přímo v tabulce , kam by se jen přenášela hodnota a naformátovat buňky jako datum, to by asi mohlo i jít. Ona celá věc je tak, že je to vytvořena databáze s údaji studentů , smluv atd, která se průběžně mění upravuje atd a potřebují při účetní vyfiltrovatdata např: ti a ti mají smlouvu do a platily tyto služby..

Offline

#12 15. 2. 2022 19:25:07

kamlan
Člen
Registrace: 15. 9. 2016
Příspěvků: 368

Re: Filtr pomocí makra VYŘEŠENO

Jen pro informaci, následující makro vypíše NumberFormat pro jednu vybranou buňku.

Sub vypisNumberFormat
	dim oDoc as object, oSel as object
	oDoc=ThisComponent
	oSel=oDoc.CurrentController.Selection
	if oSel.supportsService("com.sun.star.sheet.SheetCell") then 'vybrána 1 buňka
		msgbox("NumberFormat=" & oSel.NumberFormat)
	else
		msgbox("Vyber jen jednu buňku", 48)
	end if
End Sub

Offline

#13 16. 2. 2022 21:51:12

tanner5
Člen
Registrace: 18. 4. 2020
Příspěvků: 44

Re: Filtr pomocí makra VYŘEŠENO

To je docela šikovná věc smile
Jinak nakonec vyřešeno pomocí pomocného sloupce a zatím se zdá že funguje jak má smile
Takže všem děkuji za nápady.

Offline

Zápatí