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

#1 25. 3. 2020 18:17:17

csert
Člen
Registrace: 27. 2. 2014
Příspěvků: 30

jak odstranit řádky, které nemají požadovanou výšku

Daly by se odstranit všechny řádky které nemají požadovanou výšku? Mám výstup ze stroje kde v předloze ( nedá se upravit ) někdo nastavil vždy po vyplněném řádku ( výška 1,5 ) dva malé prázdné ( výška 0,2 ). A tak pořád dokola. Sice to vypadá přehledně, ale v tisku se report hrozně natahuje.
děkuji za radu

Offline

#2 25. 3. 2020 18:45:52

neutr
Člen
Registrace: 8. 3. 2007
Příspěvků: 3,435

Re: jak odstranit řádky, které nemají požadovanou výšku

To by se dalo asi jen makrem. Pokud to nejde upravit tak je to asi zamčené proti úpravám. Bylo by potřeba dát ukázku a také koment. Předpokládám, že jde o dlouhé soubory v Excelu. Není možnost přímo získat, nebo exportovat do CSV?


Změny výšky řádku nejsou asi v pravidelných rozestupech. Jde spíš o to, jestli by nestačilo prázdné řádky odfiltrovat. Pokud je to zamčeno pomůže kopírování do nového sešitu. To ale musím vidět - stačí pár typických řádků. Pokud nemůžete poslat vzor - měl by stačit i screen ale musí obsahovat vše podstatné.


Moje e-mailová adresa
Pokud je Váš problém vyřešen, označte prosím svůj příspěvek za "VYŘEŠENÝ"
Zlepšíte orientaci při vyhledávání řešení JAK OZNAČIT TÉMA ZA VYŘEŠENÉ

Offline

#3 25. 3. 2020 19:15:32

csert
Člen
Registrace: 27. 2. 2014
Příspěvků: 30

Re: jak odstranit řádky, které nemají požadovanou výšku

Myslel jsem makrem. Exporty nejsou možné. Zamknuto není. Nejde mě sem vložit screen pro představu, ale je to takhle:

řádek
1  - prázdný ,výška 0,2
2  - prázdný ,výška 0,2
3  - obsazené buňky - výška 1
4  - prázdný ,výška 0,2
5  - prázdný ,výška 0,2
6  - obsazené buňky - výška 1
7  - prázdný ,výška 0,2

a tak se to opakuje na několik stran

A já bych potřeboval:
1 - obsazené buňky - výška 1
2 - obsazené buňky - výška 1
3 - obsazené buňky - výška 1
4 - obsazené buňky - výška 1

Editoval csert (25. 3. 2020 19:16:52)

Offline

#4 25. 3. 2020 20:33:27

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

Re: jak odstranit řádky, které nemají požadovanou výšku

Makro označí celý sloupec aktuální buňky a v případě potvrzení smázne řádky v listě dle prázdných buněk v onom sloupci. Nehledí nijak na velikosti řádků.

Sub smazatPrazdneRadky 'smaže prázdné řádky v aktuálním listě dle prázdných buněk ve sloupci s aktuální buňkou
	Dim oDoc, oList, document, dispatcher, oRange, oFilter, oCur, oSel, iSloupec&, iRadek&
	oDoc=thisComponent
	document=oDoc.currentController.Frame
	dispatcher=createUnoService("com.sun.star.frame.DispatchHelper")
	oList=oDoc.currentController.activeSheet 'aktuální list
	oSel=oDoc.getCurrentSelection() 'aktuální výběr
	if oSel.supportsService("com.sun.star.sheet.SheetCell") then 'je vybrána jedna buňka
		iSloupec=oSel.rangeAddress.endColumn 'sloupec
		dispatcher.executeDispatch(document, ".uno:SelectColumn", "", 0, array()) 'označit sloupec
		if msgbox("Smazat řádky podle prázdných buněk v tomto sloupci?",33,"SMAZÁNÍ PRÁZDNÝCH ŘÁDKŮ")<>1 then
			dispatcher.executeDispatch(document, ".uno:Deselect", "", 0, array()) 'zrušit označení sloupce
			exit sub
		end if
	else 'je toho vybráno vícero
		msgbox("Je nutné vybrat jen jednu buňku ve sloupci který podle kterého se vymažou prázdné řádky",16)
		exit sub
	end if
	oCur=oList.createCursorByRange(oList.getCellByPosition(iSloupec,0)) 'kurzor na první buňku v aktuálním sloupci
	oCur.gotoEndOfUsedArea(true) 'kurzor na konec použitého rozsahu
	iRadek=oCur.rangeAddress.endRow 'poslední řádek rozsahu
	oRange=oList.getCellRangeByPosition(iSloupec,0,iSloupec,iRadek) 'sloupec rozsahu
	oFilter=oRange.queryEmptyCells 'vyfiltrovat prázdné buňky v rozsahu
	oDoc.currentController.Select(oFilter) 'označit vyfiltrované
	dispatcher.executeDispatch(document, ".uno:DeleteRows", "", 0, array()) 'smazat označené
End Sub

P.S. printscreen lze nahrát třeba na uloz.to a dát sem jen odkaz. Jde to tam jednoduše i bez registrace.

Editoval kamlan (30. 3. 2020 13:11:17)

Offline

#5 25. 3. 2020 21:40:12

neutr
Člen
Registrace: 8. 3. 2007
Příspěvků: 3,435

Re: jak odstranit řádky, které nemají požadovanou výšku

csert #1 napsal(a)

Daly by se odstranit všechny řádky které nemají požadovanou výšku? Mám výstup ze stroje kde v předloze ( nedá se upravit ) někdo nastavil vždy po vyplněném řádku ( výška 1,5 ) dva malé prázdné ( výška 0,2 ). A tak pořád dokola. Sice to vypadá přehledně, ale v tisku se report hrozně natahuje.

csert #3 napsal(a)

Myslel jsem makrem. Exporty nejsou možné. Zamknuto není. Nejde mě sem vložit screen pro představu, ale je to takhle:

řádek
1  - prázdný ,výška 0,2


     To je v celku dost podivné. Pokud není nic zamčeno lze potřebu řešit pomocí kontingenční tabulky nebo dokonce autofiltrem. Také mne udivuje čemu říkáte že: ale v tisku se report hrozně natahuje". Takže pokud jde o tabulkový procesor (ať už Excel, nebo Calc, či jiný) není to ten "report" který uvádíte? Popis odpovídá spíš výstupu do textového souboru - ano?
     Totiž typickými "tiskovými sestavami" disponuje pouze Base. Tam ale lze prázdné řádky odfiltrovat a navíc tam žádné nestandardně vysoké řádky nelze "vytvořit". Zbývá asi jediná možnost. Jde o Calc, nebo Excel registrovaný jako databázový zdroj. Ale výstup v podobě "tiskové sestavy" lze sekundárně načíst do Calcu jako "TXT" a pak je už výška řádků stejná a dá se odfiltrovat.
     Pokud jde tedy o takto registrovaný Calc - tak uzamčený je, ale dá se "odregistrovat", nebo vykopírovat přímo a další možnosti.


     Pokud jde o registrovaný zdroj databáze tak mi připadá nesmyslné, že byste uměl s takovým souborem manipulovat. Ale ani makro od uživatele kamlan si neškrtne protože by muselo otevřít zdroj který je v binárním formátu - tedy jako skrytý.


     Kamlan má pravdu - screeny obrazovky lze udělat vždy i když je kopírování zakázané scriptem. Odkážu, že také uvádí jak sem screen postnout.


     Chtělo by to určitě validní popis situace. Pokud je to zdroj databáze musíte uvést v jakém systému. Je možné že nemáte přístup ke zdroji, ale podle všeho můžete alespoň kopírovat. Upřesněte prosím jak se to opravdu má.

Editoval neutr (25. 3. 2020 21:42:07)


Moje e-mailová adresa
Pokud je Váš problém vyřešen, označte prosím svůj příspěvek za "VYŘEŠENÝ"
Zlepšíte orientaci při vyhledávání řešení JAK OZNAČIT TÉMA ZA VYŘEŠENÉ

Offline

#6 29. 3. 2020 13:53:54

Detrich
Člen
Registrace: 15. 3. 2020
Příspěvků: 6

Re: jak odstranit řádky, které nemají požadovanou výšku

Nebylo by by pohodlnější a) upravit výšku všech řádků na stejnou velikost? Není to problém.

Offline

#7 29. 3. 2020 15:00:53

neutr
Člen
Registrace: 8. 3. 2007
Příspěvků: 3,435

Re: jak odstranit řádky, které nemají požadovanou výšku

Pro Detrich :
     Uživatel czert poptává smazání těch "tenkých řádků" - nikoliv jejich úpravu na standardní výšku.


Moje e-mailová adresa
Pokud je Váš problém vyřešen, označte prosím svůj příspěvek za "VYŘEŠENÝ"
Zlepšíte orientaci při vyhledávání řešení JAK OZNAČIT TÉMA ZA VYŘEŠENÉ

Offline

#8 30. 3. 2020 07:25:16

Netwalker
Člen
Registrace: 20. 10. 2015
Příspěvků: 56

Re: jak odstranit řádky, které nemají požadovanou výšku

Zdravím, já nemám rád makra, tak bych na to šel od lesa (a tak to dělávám):
1. přidám si pomocný sloupec, ve kterém vytvořím číselnou řadu od 1 až po číslo posledního řádku.
2. seřadím řádky podle sloupce, kde nevyplněné sloupce nemají nic a vyplněné VŽDY mají nějakou hodnotu
3. smažu prázdné řádky, které jsou tím pádem soustředěné na konci nebo na začátku dokumentu
4. dám seřadit podle pomocného sloupce - tím získám původní pořadí bez prázdných řádků
5. před tiskem smažu/skryji/nevyberu pomocný sloupec
Pro mně jednoduché, rychlé bez nároků na přemýšlení nad makrem...

Offline

#9 11. 4. 2020 11:15:04

barevnej
Člen
Registrace: 6. 8. 2015
Příspěvků: 171

Re: jak odstranit řádky, které nemají požadovanou výšku

A nebylo by jednoduší prostě smazat makrem prázdné řádky bez ohledu jakou mají výšku?

Sub Smazat
Dim oCell as Object, oSheet as Variant, oSheets as Variant, oString as String
Dim oDoc as Object 
oDoc=ThisComponent 
oSheet=oDoc.Sheets(0)
For i = 2000 To 0 Step -1
oCell = oSheet.GetCellByPosition(0, i)
oRows = oSheet.getRows() 
oString = oCell.getString()
If oString = "" Then 
oRows = oSheet.getRows() 
oRows.removeByIndex(i,1)
End If
Next i
End Sub

číslovku 2000 můžeš měnit na to kolik cca potřebuješ prohledat řádků, nula za tím znamená že začíná na řádku 1.
oSheet.GetCellByPosition(0, i) ta nula znamená jaký sloupec má kontrolovat 0= sloupec A, sloupec B by byla 1, atd...
If oString = "" mezi uvozovkama nic není takže to znamená že pokud nenajde nic tak vymaže celý řádek.

Offline

Zápatí