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

#1 12. 11. 2024 08:38:50

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

Lámání textu v buňkách

Ahoj, nemáte někdo nějakou fintu na problém, kdy v buňce je delší text (200 a více znaků) a v každém zobrazení (tzn. v různých % velikosti obrazovky) a také při tisku resp. exportu se text láme v jiných místech. Tzn. např. při zobrazní 120% text z buňky přetéká, ale při zobrazení 140% se text do buňky vleze. V jiné buňce jiný text to má zase naopak (ve 140% přetéká a ve 120% je v pořádku). V tisku (exportu) je to pak také všelijak. Existujel nějaká finta jak ukotvit text (tedy jinak než tvrdým odřádkováním, to se mi taky nelíbí - text potřebuji editovat, tohle by byla hrozná práce) tak aby se odstavec jevil stále stejně? (Writer, pokud vím, tento problém nemá) (navíc text mám v buňce přidaný pomocí vzorce, což může být další komplikace. nevím. Pevné odstavce i pevné mezery vzorec přebírá ze zdroje, v tom by problém nebyl)


LibreOffice 5.4.

Offline

#2 14. 11. 2024 12:54:04

kamowski
Člen
Registrace: 29. 3. 2013
Příspěvků: 48

Re: Lámání textu v buňkách

- označ bunku, skupinu buniek, celý list
- Formát - Text - Zalomiť text

buď si budeš pri písaní nastavovať šírku stĺpca alebo to budeš musieť zalamovať ručne
univerzálny postup asi neexistuje

Offline

#3 14. 11. 2024 14:47:28

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

Re: Lámání textu v buňkách

Technicky to lze udělat pomocí makra. Počet znaků (podle druhu fontu) zabere na určitou šířku sloupce určitý počet znaků. Stačí postavit funkci, která zadá počet znaků k zalomení - nejlépe jako "modulo x" aplikované na celý řetězec, ale mělo by stačit i jediné zalomení na začátku. Zalomení by se mělo počítat včetně případných mezer - prostě tvrdé zalomení po určitém počtu znaků.


Postačuje tedy zjistit kolik znaků určeného fontu(ů) se vejde do určité šířky sloupce. To by neměl být problém. Když byste měl zájem pošlu základní makra k úpravě - vlastně jen kód, který vrací šířku sloupce. Mělo by to být nastaveno na buňky jako vlastnost, takže by to chtělo už jen svou ikonu.


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

#4 14. 11. 2024 16:06:31

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

Re: Lámání textu v buňkách

to neutr - zajímavé, to mě fakt nenapadlo. Musí to mít tedy i reciproční funkci - tedy vymazat zadaná tvrdá zalomení, aby to šlo editovat. A při novém spuštění nejdříve vymazat stávající zalomení a udělat nová. Každopádně pokud byste něco měl na skladě maker, tak bych to bral, sám nevím úplně jak bych na to šel.


LibreOffice 5.4.

Offline

#5 14. 11. 2024 16:36:30

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

Re: Lámání textu v buňkách

Nicméně stále je tu ten problém, že když zadám tvrdá zalomení do textu, tak v některém zobrazení ten řádek přeteče a zalomení se vlastně ocitne až na dalším řádku, takže možná to vlastně není úplně hotové řešení - resp. problém skákání řádků při různém zobrazení přetrvává.



Edit: Zkusil jsem jen prostě ručně zadat zalomení a je tu nevýhoda že nefunguje zarovnání do bloku - tvrdý konec se nechává volně - řádek se neroztáhne do bloku, což já tedy chci - takže to je slepá cesta. Jedině že byse dal v calcu zadat "měkký konec" jen odřádkování nikoli odstavec, což nevím ani ručně jak na to.

Editoval ludviktrnka (14. 11. 2024 17:33:52)


LibreOffice 5.4.

Offline

#6 14. 11. 2024 17:49:15

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

Re: Lámání textu v buňkách

Už si to začínám pomalu představovat, že by to šlo jako funkce. Nicméně já bych rád text zarovnával do bloku, takže odřádkování musí být skutečně pouze nový řádek, nikoli nový odstavec (jako ve Writeru Shift+Enter), což je asi znak char(13) = CR, ale zkoušim to a funguje to stejně jako char(10) = LF, takže se obávám že calc tohle prostě vůbec nebude umět.


EDIT: tak jsem myslel že by se to ještě dalo obejít přes nezalomitelné mezery char(255), ale to je v calcu taky nefunkční ... Nějak funguje jakýsi char(160), jenže to je stejně blbost, protože to se zase neumí roztáhnut tak jako normální mezera char(32), takže v bloku dělají pevné mezery ještě horší paseku


EDIT: myslím že vytvořit v Calcu pevný text v bloku v podstatě nelze, nicméně zjistil jsem že v tiskovém náhledu to je pořád stejný a stabilní, takže v případě takové polosazečské práce, jak jsem teď dělal, s větším množstvím textu, je zapotřebí čumět často do tiskového náhledu a nespoléhat se na aktuální zobrazení listu.

Editoval ludviktrnka (14. 11. 2024 18:45:10)


LibreOffice 5.4.

Offline

#7 14. 11. 2024 19:40:05

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

Re: Lámání textu v buňkách

Tak posílám makra pro práci s šířkou sloupce:

Sub Vyska_Sirka_1_Zjistit
Dim oDoc As Object 
Dim oCell As Object 
oDoc=ThisComponent 
oSheet=oDoc.sheets(0) 
oCell=oSheet.getCellByPosition(17,0) 
Unit_Hieght=oCell.getRows().Height 
Unit_Width=oCell.getColumns().Width 
Print "šířka = "& Unit_Hieght &" : Výška = " &Unit_Width
End Sub


Sub Vyska_Sirka_2_UpravitVse
oDoc = ThisComponent 
oSheet = oDoc.getSheets().getByIndex(0) 
oRows = oSheet.Rows 
oColumns = oSheet.Columns 
oRows.Height=1000'1cm 
oColumns.Width=5000'5cm  
End Sub


Sub Vyska_Sirka_3_UpravJednotlive
oDoc = ThisComponent 
oSheet = oDoc.getSheets().getByIndex(0) 
oSheet.Rows(0).Height=5000'5cm 
oSheet.Columns(1).Width=1000'1cm 
End Sub

Ale musím upozornit, že jsem testoval zalamování Calcu ve verzi
24.8.2.1 (x86) / LibreOffice Community Build ID: 0f794b6e29741098670a3b95d60478a65d05ef13 CPU threads: 2; OS: Windows 10 X86_32 (10.0 build 19045); UI render: Skia/Raster; VCL: win Locale: en-GB (cs_CZ); UI: cs-CZ
Calc: threaded
     Pokud dám za buňku s textem nějaký text (třeba mezeru), tak se text zalomí správně při zarovnání doleva. Když zadám text i před tuto buňku, zalomí se právně i když zadám zarovnání doprava - jen je vidět text od konce.
     Chápu, že text strukturovaný do buňky může obsahovat i odstavce, respektive nové řádky. Ty se načtou do nových řádků. Tenhle problém lze řešit transcripcí Charů 9,10,13 pomocí pomlček. Tím se vytvoří spojitý řetězec. Pokud dáme místo Char(9) 2 mezery, za Char(10) 3 mezery a za Char(13) 4 mezery lze to následně zpětně uvést do původní podoby.

Editoval neutr (14. 11. 2024 19:42:39)


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 14. 11. 2024 20:00:19

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

Re: Lámání textu v buňkách

Nakonec jsem udělal takovou jednoduchou funkci, ale nicméně, není to to, co jsem chtěl, neboť mě šlo o blok. Níže uvedená funkce funguje jen při zarovnání na strany nebo na střed (neumí se roztáhnout mezery). Ale i tohle možná někdy využiju, je to docela šikovná funkce, funguje nezávisle na aktuální šířce sloupce, což se může hodit.

Function Sekvence (stext as string, letters as integer) as string
	Dim Result As String
  	Dim StartPos As Long
  	Dim CurrentPos As Long
  	Dim Sentence as integer
  	
  	Result = stext
  	CurrentPos = 1
  	StartPos = 1
  	Sentence = letters

	do while CurrentPos <> 0
		CurrentPos = InStr(StartPos, stext, " ")

		if CurrentPos = 0 AND len(Result) - Sentence > 0 Then
			CurrentPos = len(Result)
		end if

		if StartPos <= Sentence AND CurrentPos > Sentence  Then
			
			PrevPos = InStr(StartPos - 3, stext, " ")
			
			if PrevPos = StartPos - 3 Then
       				StartPos = StartPos - 2
       			end if
					
			Result = left(Result, StartPos - 2) & CHR(10) & right(Result, len(Result) - StartPos + 1)
       			Sentence = StartPos + letters + 1
       			StartPos = CurrentPos + 1

       		elseif StartPos < Sentence AND CurrentPos = Sentence Then
       		
 			if CurrentPos - StartPos  = 1 Then
       				CurrentPos = CurrentPos - 2
       			end if
       		
       			Result = left(Result, CurrentPos - 1) & CHR(10) & right(Result, len(Result) - CurrentPos)
       			Sentence = CurrentPos + letters + 1
       			StartPos = CurrentPos + 1

       		else
       			StartPos = CurrentPos + 1
       	
       		end if
		
	loop

	Sekvence = Result
End Function

EDIT: ještě by bylo super, pohlídat sirotky :-)
EDIT: sirotci vyřešeny. Blbě to láme poslední řádek, pokud to má zlomit před posledním slovem a text nekončí mezerou
EDIT: lámání posledního řádku vyřešeno :-)

Editoval ludviktrnka (15. 11. 2024 12:52:42)


LibreOffice 5.4.

Offline

Zápatí