Irányított szűrő - kimeneti mezők megadása

Táblázatkezelő
moonster
Hozzászólások: 2
Csatlakozott: 2012. február 19., vasárnap 12:49

Irányított szűrő - kimeneti mezők megadása

Hozzászólás Szerző: moonster »

Sziasztok!

Úgy szeretném használni az irányított szűrőt, hogy a feltételek megadása után ne az összes mezőt/oszlopot
jelenítse meg, csak azokat, amelyeket én megadok.
Egy feladatot kell megoldanom Excelben és Calc-ban is.
Excelben úgy működik, hogy a kimenet helyére felveszem azokat a mezőneveket, amelyeket szeretnék megjeleníteni és a többi mező/oszlop nem is jelenik meg.
Calc-ban is próbáltam, de minden mezőt megjelenít. A rekordokat/sorokat szűri szépen, de sajnos a mezőket nem tudtam.
Esetleg az irányított szűrőben van mód a rendezésre is?
Feladat: Jelenítse meg az S-es népsűrűségű megyék adatait. Minden mezőt jelenítsen meg, kivéve a Népsűrűséget.
Rendezze az adatokat Lakás szerint növekvő sorrendbe.


Csatolok két képet. AZ elsőben a szűrés előtti állapot, a kimeneti tartományban megadott kevesebb mezővel,
a második pedig a szűrés után, ahol minden mezőt megjelenített, azt is amit nem akartam.

köszönöm a válaszokat előre is.
Csatolmányok
szűrés előtt
szűrés előtt
szűrés után
szűrés után
w7, Libre Office 3.4
antiuhu
Önkéntesek
Hozzászólások: 194
Csatlakozott: 2008. február 28., csütörtök 23:44

Re: Irányított szűrő - kimeneti mezők megadása

Hozzászólás Szerző: antiuhu »

Üdv!

Nem tudok olyan lehetőségről, hogy a szűrésnél meg lehetne adni ilyen opciót (ez nem zárja ki, hogy létezik ilyen funkció).
Igazából ezt a problémát úgy oldanám meg, hogy készítenék egy makrót.
Elkészítettem a mintád alapján egy doksit amiben benne van a megoldásom.

Kód: Egész kijelölése

Sub Szures()
  rem Irányitott szűrés makró segítségével
  Dim oSheet     'A sheet from the Calc document.
  Dim oRanges    'The NamedRanges property.
  Dim oCritRange 'Range that contains the filter criteria.
  Dim oDataRange 'Range that contains the data to filter.
  Dim oFiltDesc  'Filter descriptor.

  REM Range that contains the filter criteria
  oSheet = ThisComponent.getSheets().getByIndex(0)
  oCritRange = oSheet.getCellRangeByName("Filter")

  REM You can also obtain the range containing the 
  REM filter criteria from a named range.
  REM oRanges = ThisComponent.NamedRanges
  REM oRange = oRanges.getByName("AverageLess80")
  REM oCritRange = oRange.getReferredCells()

  REM The data that I want to filter
  oSheet = ThisComponent.getSheets().getByIndex(0)
  oDataRange = oSheet.getCellRangeByName("Adatok")

  oFiltDesc = oCritRange.createFilterDescriptorByObject(oDataRange)
  oFiltDesc.UseRegularExpressions = True
  REM Másolja a szűrt adatot másik munkalapra.  
  oFiltDesc.CopyOutputData = True
  REM Készít egy új adattartományt a második munkalapra,
  REM A oszlop, 1 sorba (A számozás 0-tól kezdődik)
  Dim x As New com.sun.star.table.CellAddress
  x.Sheet = 1
  x.Column = 0
  x.Row = 0
  oFiltDesc.OutputPosition = x
  oDataRange.filter(oFiltDesc)

  REM Masodik munkalap B oszlopanak torlese
  Dim Doc As Object
  Dim Sheet As Object
  Dim NewColumn As Object
  
  Doc = ThisComponent
  Sheet = Doc.Sheets(1)
  
  Sheet.Columns.removeByIndex(1, 1)

rem Innentől a makró rögzítővel készítettem el a rendezést.
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 = "DbName"
args1(0).Value = "Kimenet"

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

rem ----------------------------------------------------------------------
dim args2(7) as new com.sun.star.beans.PropertyValue
args2(0).Name = "ByRows"
args2(0).Value = true
args2(1).Name = "HasHeader"
args2(1).Value = true
args2(2).Name = "CaseSensitive"
args2(2).Value = false
args2(3).Name = "NaturalSort"
args2(3).Value = false
args2(4).Name = "IncludeAttribs"
args2(4).Value = true
args2(5).Name = "UserDefIndex"
args2(5).Value = 0
args2(6).Name = "Col1"
args2(6).Value = 4
args2(7).Name = "Ascending1"
args2(7).Value = true

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

end sub
Röviden
- Készítsd el az adat tartományokat (Adatok, Filter)
- Először futtasd le az irányított szűrőt, hogy a második oldalon meghatározhasd a "Kimenet" Adat tartományt. Ez azért kell,hogy a rendezéskor a tartomány határai dinamikusan változzanak.
- Makró elkészítése
- Tartomány szűrése valamilyen feltétel alapján
- A szűrés eredményének másolása a második munkalapra.
- A szűrt tartományból "Népsűrűség" törlése.
- Makró gombhoz/menüponthoz rendelése
- Doksi használata.

Anti

Felhasznált anyagok:
Irányított szűrő
Oszlopok hozzáadása/törlése
Csatolmányok
Iranyitott_szuro.ods
(12.16 KiB) Letöltve 187 alkalommal.
laszlogonda
Önkéntesek
Hozzászólások: 47
Csatlakozott: 2009. szeptember 15., kedd 18:09
Kapcsolat:

Re: Irányított szűrő - kimeneti mezők megadása

Hozzászólás Szerző: laszlogonda »

De ha makrómentesen akarod, átmeneti lépéssel is megoldható.
Irányított szűrővel egy másik munkalapra kiíratod az eredményeket,
s a végleges helyre csak simán cellahivatkozással átmásolod.
SuSe11.4 + OO, XP SP3 + OO
moonster
Hozzászólások: 2
Csatlakozott: 2012. február 19., vasárnap 12:49

Re: Irányított szűrő - kimeneti mezők megadása

Hozzászólás Szerző: moonster »

KÖszönöm a válaszod!

Eddig is így csináltam, hogy másik munkalapra írattam az eredményt a szűrőfeltételek alá,
majd manuálisan kitöröltem a szükségtelen oszlopokat.
w7, Libre Office 3.4
Avatar
Zizi64
Globális moderátorok
Hozzászólások: 4034
Csatlakozott: 2008. november 12., szerda 21:22
Tartózkodási hely: Budapest

Re: Irányított szűrő - kimeneti mezők megadása

Hozzászólás Szerző: Zizi64 »

...És laszlogonda makrós megoldását is megnézted?
...mert most amikor írok, még csak kétszer töltötték le, és az - emlékeim szerint - mindkettő én voltam: egyszer itt a munkahelyemen (biztosan, itt a fájl a gépemen), egyszer meg otthon (úgy emlékszem)...
Sok sikert!
Kovács Tibor (W10x64Pro/W7x64P: 7.5.8;
winPenPack/PortableApps: LO3.3.1-7.6.2, AOO4.1.14
Ha megoldódott a probléma, jelöld a témaindító hozzászólásod címének szerkesztésével. Írd elé: [Megoldva].
laszlogonda
Önkéntesek
Hozzászólások: 47
Csatlakozott: 2009. szeptember 15., kedd 18:09
Kapcsolat:

Re: Irányított szűrő - kimeneti mezők megadása

Hozzászólás Szerző: laszlogonda »

moonster írta:KÖszönöm a válaszod!

Eddig is így csináltam, hogy másik munkalapra írattam az eredményt a szűrőfeltételek alá,
majd manuálisan kitöröltem a szükségtelen oszlopokat.
De nem manuális törlésre gondoltam, hanem úgy, hogy szűrővel egy másik munkalapra,
s onnan csak a neked szükséges oszlopokat hivatkozva vissza.
Lehet nem érthető, de megpróbálom leírni.
Van négy oszlopod, leszűröd, s a szűrés után marad a négy oszlop.
Majd abból a szükséges oszlopokat hivatkozással veszed ki (nem kell törölni).
1. Szűréssel egy átmeneti munkalapra kerülnek az adatok.
2. Az átmeneti munkalapról hivatkozol az adatok végső helyére.
pl.: ha a második oszlop nem kell, akkor kihagyod ->
A1=munkalap átmeneti!A1;B1=munkalap átmeneti!C2;...
Lényegében a nem szükséges oszlopod "eltűnik", s nem kell törölgetni.
A hivatkozás biztos működik más verzión is, mert én is sokat dolgozok Libre-val, meg MsOffice-val feltváltva,
emiatt a makrók nem igazán szerencsések.
SuSe11.4 + OO, XP SP3 + OO
Válasz küldése