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

#1 21. 8. 2016 11:32:10

czsars
Člen
Registrace: 22. 1. 2016
Příspěvků: 53

Odstranění HTML tagů a dosazení textu do jiné buňky - VYŘEŠENO

Mám prosím prosbu k jedné funkci. viz: =IF(LEN(B3046)>160;LEFT(B3046;160);B3046)&"..", která mi načítá část textu z jiné buňky a to konkrétně pouze 160znaků. Je možné přidat do této funkce přidat možnost aby zároveň z tohoto textu odstranila případné html tagy? <p></p> ap. Děkuji

Editoval czsars (21. 8. 2016 14:59:43)

Offline

#2 21. 8. 2016 12:01:34

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

Re: Odstranění HTML tagů a dosazení textu do jiné buňky - VYŘEŠENO

Myslím že to funkcí moc nejde. Buď se vytvoří nástavbová funkce, nebo se tagy odstraní pomocí najít nahradit. Což už máte někde ve fóru vyřešeno. Jediné co mě napadá je funkce substitute kterou byste ale musel použít tolikrát, kolik je různých tagů SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(vaše funkce;"<p>";"");"</p>";"");"<další tag>";"") ... atd.


LibreOffice 5.4.

Offline

#3 21. 8. 2016 12:43:52

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

Re: Odstranění HTML tagů a dosazení textu do jiné buňky - VYŘEŠENO

Jestli je to 160 znaků, nebo i víc než několik málo desítek a takových, či podobných textů v řádech více nežli stovek (vidím 3046) je na místě určitě makro. Vzorci by to teoreticky šlo, ale také to může být přetížení stroje vlivem skutečnosti, že dat je mnoho. Množstvím se stroj zpomaluje až začne padat.



Takže jestli to myslíte vážně - zapomeňte na vzorce. Tagů existuje poměrně mnoho a nestačí odstarnit jen <> a </>. Navíc je docela možné, že to načítáte z XML kde je předpoklad že velké rozmanitosti. Ale ani v HTML to není legrace. Takže mazací vzorec musí najít první tag "<" a najít až poslední tag ">" - musí tedy dva podobné znaky nejdříve přeskočit. To je konstrukce sice možná, ale velmi náročná.


Nemám představu kolik máte řádků, ale vzhledem k tomu že se jedná evidentně o nějaká data pro eshop bůh ví z kolika různých zdrojů - v počtu zřejmě mnoha tisíc řádků vzorce dost jistě nepostačí.


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 21. 8. 2016 12:45:59

czsars
Člen
Registrace: 22. 1. 2016
Příspěvků: 53

Re: Odstranění HTML tagů a dosazení textu do jiné buňky - VYŘEŠENO

Moc děkuji za odpověď. mě by to asi takhle nevadilo ale mohl byste mi to prosím dosadit do té mé funkce? Nějak mi to nejde.

Offline

#5 21. 8. 2016 12:48:32

czsars
Člen
Registrace: 22. 1. 2016
Příspěvků: 53

Re: Odstranění HTML tagů a dosazení textu do jiné buňky - VYŘEŠENO

Myslím, že mi vystačí ten výše zmíněný postup s navolením vlastních tagů, protože při prvních 160 znacích se ani jiné neobjevují. A produktů je cca 4000.

neutr napsal(a)

Jestli je to 160 znaků, nebo i víc než několik málo desítek a takových, či podobných textů v řádech více nežli stovek (vidím 3046) je na místě určitě makro. Vzorci by to teoreticky šlo, ale také to může být přetížení stroje vlivem skutečnosti, že dat je mnoho. Množstvím se stroj zpomaluje až začne padat.



Takže jestli to myslíte vážně - zapomeňte na vzorce. Tagů existuje poměrně mnoho a nestačí odstarnit jen <> a </>. Navíc je docela možné, že to načítáte z XML kde je předpoklad že velké rozmanitosti. Ale ani v HTML to není legrace. Takže mazací vzorec musí najít první tag "<" a najít až poslední tag ">" - musí tedy dva podobné znaky nejdříve přeskočit. To je konstrukce sice možná, ale velmi náročná.


Nemám představu kolik máte řádků, ale vzhledem k tomu že se jedná evidentně o nějaká data pro eshop bůh ví z kolika různých zdrojů - v počtu zřejmě mnoha tisíc řádků vzorce dost jistě nepostačí.

Offline

#6 21. 8. 2016 12:49:34

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

Re: Odstranění HTML tagů a dosazení textu do jiné buňky - VYŘEŠENO

Já ještě napovím - spíš panu Trnkovi. Rozsekněte řetězec před prvním tagovou značkou a najdete relativně snadno poslední tagovou značku - a usekněte. Následně sloučit část před a za tagem.


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

#7 21. 8. 2016 12:57:13

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

Re: Odstranění HTML tagů a dosazení textu do jiné buňky - VYŘEŠENO

Pokud byste chtěl použít vlastní funkci tak stačí tuto nahrát do vlastní knihovny: nástroje -> makra -> Správce maker -> LibreOffice Basic -> Moje Makra / Standard / (volba nový) a modul1. Otevře se editor kam stačí normálně ctrl c/v nahrát níže uvedenou funkci. Potom ji v sešitu použijete jeko removetag(váš text)

Function RemoveTag (veta as string)
zacatek = 1
Do While zacatek <> 0
	zacatek = InStr(veta, "<")
	if zacatek <> 0 then
		konec = InStr(veta, ">")
		vyhodit = Mid(veta, zacatek, konec - zacatek + 1)
		veta = Replace(veta, vyhodit ,"")
	end if	
Loop
veta = Replace(veta,"  "," ")
removetag = veta
End Function

LibreOffice 5.4.

Offline

#8 21. 8. 2016 13:08:49

czsars
Člen
Registrace: 22. 1. 2016
Příspěvků: 53

Re: Odstranění HTML tagů a dosazení textu do jiné buňky - VYŘEŠENO

Nepochybuju o tom, že víte o čem mluvíte a že je to ta nejlepší možnost, přesto bych se přiklonil k té původní funkci =IF(LEN(B3046)>160;LEFT(B3046;160);B3046)&"..", která funguje skvěle, jen bych do ní potřeboval dosadit to od p.Trnky SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(vaše funkce;"<p>";"");"</p>";"");"<další tag>";""), přiznám se, že nevím, kam to přesně vložit. Opravdu se v tom teprve rozkoukávám a tak prostě nevím. Díky moc

Offline

#9 21. 8. 2016 13:09:49

czsars
Člen
Registrace: 22. 1. 2016
Příspěvků: 53

Re: Odstranění HTML tagů a dosazení textu do jiné buňky - VYŘEŠENO

V podstatě jsou to stále se opakující tagy, které jsem psal, takže by to neměl být problém, problém by to asi byl, kdyby se načítal celý obsah buňky a ne jen těch 160 znaků

Offline

#10 21. 8. 2016 13:12:47

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

Re: Odstranění HTML tagů a dosazení textu do jiné buňky - VYŘEŠENO

to neutr: no s tím rozseknutím jsem to dělal než mi LP napověděl funkci replace, ta je pro náhrady textu o něco pohodlnější.


LibreOffice 5.4.

Offline

#11 21. 8. 2016 13:18:04

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

Re: Odstranění HTML tagů a dosazení textu do jiné buňky - VYŘEŠENO

to czsars: doporučuji zadejte si tu funkci pak bude vzorec následovný:
=removetag(IF(LEN(B3046)>160;LEFT(B3046;160);B3046)&"..")
Pokud funkci zapíšete do "složky" daného souboru (v tom editoru maker), tak se funkce přenáší spolu se souborem, pokud ji máte ve složce "moje makra" pak se se souborem nepřenáší, ale zase ji máte k použití v jiných souborech. nejlépe je nahrát ja na obě místa :-)

jinak s těmi subs.. nějak takto

=trim(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(IF(LEN(B3046)>160;LEFT(B3046;160);B3046)&"..";"<p>";"");"</p>";"");"</a>";""))

Editoval ludviktrnka (21. 8. 2016 13:19:20)


LibreOffice 5.4.

Offline

#12 21. 8. 2016 13:29:06

czsars
Člen
Registrace: 22. 1. 2016
Příspěvků: 53

Re: Odstranění HTML tagů a dosazení textu do jiné buňky - VYŘEŠENO

Vyzkouším a moc děkuji!

Offline

#13 21. 8. 2016 13:34:26

czsars
Člen
Registrace: 22. 1. 2016
Příspěvků: 53

Re: Odstranění HTML tagů a dosazení textu do jiné buňky - VYŘEŠENO

poslední funkce funguje skvěle, snad jen ještě jedna věc a to aby místo toho odstranění tagu vznikla mezera, protože teď třeba končí věta tečkou a za ní hned začíná další, což není moc dobré. Jinak až trochu pokročím, určitě přistoupím i k těm makrům, zatím se bojím:-(((

Offline

#14 21. 8. 2016 13:50:39

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

Re: Odstranění HTML tagů a dosazení textu do jiné buňky - VYŘEŠENO

... mezery odstraňuje funkce TRIM. Ale pokud po odstranění tagu vznikne mezera a zároveň nepoužijete funkci TRIM, budete tam mít tři mezery "text <p> další text" = "text   další text". Ale zkuste se taky podívat do nápovědy jak se tvoří funkce substitute a hned budete vědět jak na to.


Jinak vzhledem ke zkracování nějakého html textu je riziko rozdělení tagu, tak jsem musel funkci upravit. Váš vzorec bude vypadat takto:=IF(LEN(B3046)>160;removetag(LEFT(B3046;160))&"..";removetag(B3046))


a upravená funkce (ochrana před neukončeným tagem) takto:

Function RemoveTag (veta as string)
zacatek = 1
Do While zacatek <> 0
	zacatek = InStr(veta, "<")
	if zacatek <> 0 then
		konec = InStr(veta, ">")
		if konec > zacatek then
			vyhodit = Mid(veta, zacatek, konec - zacatek + 1)
			veta = Replace(veta, vyhodit ,"")
		else
			konec = Len(veta)	
			vyhodit = Right(veta, konec - zacatek + 1)
			veta = Replace(veta, vyhodit ,"")	
		end if	
	end if	
Loop
veta = Replace(veta,"  "," ")
removetag = veta
End Function

Editoval ludviktrnka (21. 8. 2016 14:01:00)


LibreOffice 5.4.

Offline

#15 21. 8. 2016 14:59:23

czsars
Člen
Registrace: 22. 1. 2016
Příspěvků: 53

Re: Odstranění HTML tagů a dosazení textu do jiné buňky - VYŘEŠENO

Asi jsem blbej ale stačilo pro vložení té mezery vložit jako nahrazení mezeru mezi uvozovky.:-) Každopádně moc díky.

Offline

#16 21. 8. 2016 18:38:43

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

Re: Odstranění HTML tagů a dosazení textu do jiné buňky - VYŘEŠENO

... jinak tedy v tom vzorci asi máte chybu. Ty dvě tečky to dává na konec každého textu a ne jen zkráceného. Ten vnitřek musí být takto: IF(LEN(B3046)>160;LEFT(B3046;158)&"..";B3046) dvě tečky jdou jen za zkrácený text a nikoli za nezkrácený (tedy jestli jsem to správně pochopil)


LibreOffice 5.4.

Offline

#17 21. 8. 2016 19:12:40

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

Re: Odstranění HTML tagů a dosazení textu do jiné buňky - VYŘEŠENO

.. ještě taková rada nakonec: zkoušejte si vnoření funkcí. Například v A1 mám nějaký text, chci jej zkrátit na 160 znaků, přidat k němu dvě tečky a odstranit <p> a </p>.
takže:
B1 = left(A1;160)  máme zkráceno
C1 = B1&".."   máme přidané tečky
D1 = substitute(C1;"<p>";"")   máme vyhozené p
E1 = substitute(D1;"</p>;"") máme vyhozené druhé p

no a potom místo těch odkazů nakopírujete ty předchozí vzorce takže vám vyjde jinak nepochopitelný vzorec:
E1 = substitute(substitute(left(A1;160)&"..";"<p>";"");"</p>;"")
tím se naučíte jak dávat vzorce do sebe - je to jednoduché jen je potřeba si ten postup v počátcích rozfázovat.
A obecně těch textových funkcí není mnoho, dají se přečíst a naučit za jeden večer.


LibreOffice 5.4.

Offline

#18 21. 8. 2016 20:57:45

czsars
Člen
Registrace: 22. 1. 2016
Příspěvků: 53

Re: Odstranění HTML tagů a dosazení textu do jiné buňky - VYŘEŠENO

Super, kouknu na to.Díky moc

Offline

#19 24. 8. 2016 09:18:57

czsars
Člen
Registrace: 22. 1. 2016
Příspěvků: 53

Re: Odstranění HTML tagů a dosazení textu do jiné buňky - VYŘEŠENO

Zdravím Vás, mám ještě dotaz k té funkci odstranění html tagů a výpis určitého počtu znaků. Někde to funguje perfektně a někde ne. Dám příklad. V buňce B2964 mám následující.

<p>Ostružina skvěle vybalancovaná s chladivým a osvěžujícím mentolem v podobě příchutě určené k míchání vlastního e-liquidu, který můžete použít ve své <strong>elektronické cigaretě</strong>.&nbsp;</p>
<p>Tak přesně tuto chuť vystihuje Příchuť <strong>Flapjack</strong> od renomovaného výrobce liquidů, bází a příchutí pro elektronické cigarety francouzská firma <strong>The Fuu</strong>.</p>

jako funkci pro oddělení tagů a výpisu 250 znaků jsem použil následující.

=TRIM(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(IF(LEN(B2964)>250;LEFT(B2964;250);B2964)&"..";"<p>";"");"</p>";"");"<strong>";"");"</strong>";"");"&nbsp;";""))


Výsledek je bohužel špatný, protože není vypsáno správný počet znaků a navíc první znaky nezačínají první větou jak by měly.

Díky za rady


Tak kecá, ono to tam zřejmě je, když obsah buňky vložím jinam jako text, tak je tam v postatě všechno ale proč mi ta buňka, kde je funkce ukazuje obsah od druhé věty? Nějaké zalamování nebo tak něco?

Editoval czsars (24. 8. 2016 09:23:15)

Offline

#20 24. 8. 2016 11:06:51

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

Re: Odstranění HTML tagů a dosazení textu do jiné buňky - VYŘEŠENO

Musíte nejprve vyhledat znak CHAR(9), nebo CHAR(11) - z hlavy si to nepamatuju. Zalomení je znak menší nežli 32. proto stačí najít a smazat CODE() menší nežli 32.


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

#21 24. 8. 2016 11:19:14

czsars
Člen
Registrace: 22. 1. 2016
Příspěvků: 53

Re: Odstranění HTML tagů a dosazení textu do jiné buňky - VYŘEŠENO

Bavíme se o libre calcu, ne o databázi:-) Já absloluitně nevím, kde to v calcu nastavit.

Offline

#22 24. 8. 2016 11:32:10

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

Re: Odstranění HTML tagů a dosazení textu do jiné buňky - VYŘEŠENO

Já o databázi nemluvím. Nejsem doma a tak nemohu poslat příklad. Ale udělejte si pokus v Calcu. Do sloupce A zadejte vzorec =CHAR(ROW()). Vzorec zkopírujte od 1. do řádku 255 a podívejte se kde Vám vznikl vyšší řádek. To je znak který zalamuje. Zadejte si vyhledávání CODE(číslo) a smažte ho. Vzorců máte k dispozici dost - třeba Substitute() to už umíte.

Editoval neutr (24. 8. 2016 11:38:17)


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

#23 24. 8. 2016 11:43:28

czsars
Člen
Registrace: 22. 1. 2016
Příspěvků: 53

Re: Odstranění HTML tagů a dosazení textu do jiné buňky - VYŘEŠENO

Díky, kouknu na to. myslel jsem, že je to jen něco v nastavení zobrazení buňky.

Offline

#24 24. 8. 2016 12:31:56

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

Re: Odstranění HTML tagů a dosazení textu do jiné buňky - VYŘEŠENO

To také lze ale nyní se dá jen VLOŽIT > nezalomitelnou mezeru. Opačne to nefunguje. Jedná se o zalomení v buňce a návod uvádí toto (přibližně) :
Vložení zalomení řádku v buňkách. Když chceme vložit zalomení v buňce ??? asi ??? stiskněte Ctrl+něco.
také je tam více detailů.

Také to lze najít dialogem najít a nahradit, ale otestujte si znak který zalamuje. Potom hledáte CHAR(číslo) a nahradit - nic nevyplňujte, nebo jen mezeru " ".

Editoval neutr (24. 8. 2016 12:33: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

#25 24. 8. 2016 13:31:34

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

Re: Odstranění HTML tagů a dosazení textu do jiné buňky - VYŘEŠENO

tento vzorec =SUBSTITUTE(B2964;CHAR(10);" ")


LibreOffice 5.4.

Offline

Zápatí