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

#1 Re: Calc » hyperlink - úprava viditeľného textu » 25. 3. 2026 15:33:48

Ano to je jiné "kafe". Pomocí makra rozebereme hyperlinky do tvaru:

https://sk.wikipedia.org/wiki/Adamovské_Kochanovce#
https://sk.wikipedia.org/wiki/Adamovské_Kochanovce#Dejiny
https://sk.wikipedia.org/wiki/Adamovské_Kochanovce#Miestne_časti
https://sk.wikipedia.org/wiki/Adamovské_Kochanovce#Malé_Bierovce
https://sk.wikipedia.org/wiki/Adamovské_Kochanovce#Kochanovce
https://sk.wikipedia.org/wiki/Adamovské_Kochanovce#Adamovce
https://sk.wikipedia.org/wiki/Adamovské_Kochanovce#Stavebné_pamiatky
https://sk.wikipedia.org/wiki/Adamovské_Kochanovce#Národnostné_zloženie
https://sk.wikipedia.org/wiki/Adamovské_Kochanovce#Významné_osobnosti
https://sk.wikipedia.org/wiki/Adamovské_Kochanovce#Referencie

Makro které to umí rozebrat:

Sub ShowAllHyperlinks()
	Dim oDocument as object
	Dim oSheet as Object
	Dim oCellCursor as object	
	Dim intLastRow as integer
	Dim intLastCol as integer
	Dim oNewSheet as object
	Dim intCurRow as integer
	Dim intCurCol as integer
	Dim intNewRow as integer
	Dim oNewCell as object
	dim strURLList() as string
	Dim oCell as Object
	Dim strNewSheet as String
	' Get access to the document
	oDocument   = ThisComponent 
	' Get New Sheet Name From User	
	strNewSheet = inputBox ("zadejte název pro nov7 list, který zobrazí seznam všech URLs")
	' Find Last Cell of Data in Sheet
	oSheet = oDocument.getCurrentSelection.getSpreadSheet
	oCellCursor = oSheet.createCursor()
   	oCellCursor.gotoEndOfUsedArea(False)
	intLastRow  = oCellCursor.getRangeAddress().endRow
	intLastCol = oCellCursor.getRangeAddress().endColumn
	intNewRow = 0
	' Loop Through all Cells looking for URLs
	For intCurRow = 0 to intLastRow
		For intCurCol = 0 to intLastCol
			oCell =  oSheet.getCellByPosition(intCurCol, intCurRow)
			' VarType 9 = Object
			If vartype(oCell) = 9 then
				' If Count is greater than 1, we have a cell with a URL
				If oCell.TextFields.Count > 0 Then
			   		Redim Preserve strURLList(intNewRow)
			   		' Grab the URL and store it in an array
			   		strURLList(intNewRow) = oCell.GetTextFields.getByIndex(0).URL
		   			intNewRow = intNewRow + 1
		   		End If
		   	End If
 		Next
 	Next
 	' Create the new Sheet
	oSheet = ThisComponent.createInstance("com.sun.star.sheet.Spreadsheet")
	oDocument.Sheets.insertByName(strNewSheet, oSheet)
	' Loop Through Array and put the URLs on the new Sheet
	For intCurRow = 0 to intNewRow - 1
		oCell = oSheet.getCellByPosition(0, intCurRow)
		oCell.String = strURLList(intCurRow)
	Next
	msgbox "URL kompletně extrahovány"
End Sub

Zde se nabízí několik postupů. Ukázka obsahuje i název, ale můžeme ho kompletně použít jako URL a buď použít vzorce "hyperlink", nebo vložit do buňky vedle nový název, načíst URL a přes název vložit Hypertext.


Rozebrat původní hypertexty můžeme udělat naráz: vybrat všechny a spustit makro. V novém listu máme naráz všechny, ale přestavět musíme jednotlivě, nebo makrem (to jsem testoval před mnoha lety, takže neručím za výsledek). Pokud byste si neporadil, musíte mi poslat ukázku a já to doladím. Jde o to jak nastavit různé názvy pomocí vzorců. Domnívám se, že Vaše poznámka (TN) znamená okres Trnečín, ale problematik může být víc - například získat část názvu z URL vytvořeného makrem ap. Zde je makro které by mělo umět hromadně vytvořit nové hypertexty:

Sub Cyklus
' n = počet řádků s odkazy počínaje řádkem 0 do n-tého (-1)
For i = 0 To n
ReplaceByHyperlink
Next i
End Sub

sub ReplaceByHyperlink 'udělá ze zadaného textu hyperlink - i v Calcu
    dim document   as object
    dim dispatcher as object
    dim oSelection, oRange as object
    dim strSelectedWord as String
    oSelection = ThisComponent.CurrentController.Selection
    oRange = oSelection(0)
    If Not (HasUnoInterfaces(oRange, "com.sun.star.text.XTextRange")) Then
        MsgBox "Text není přístupný"
        exit sub
    End if
    strSelectedWord = oRange.getString
    If Len(strSelectedWord) < 1 Then
        MsgBox "Text není vybrán"
        exit sub
    End if
    document   = ThisComponent.CurrentController.Frame
    dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
    dim args1(4) as new com.sun.star.beans.PropertyValue
    args1(0).Name = "Hyperlink.Text"
    args1(0).Value = strSelectedWord 'zadat buňku s názvem hypertextu
    args1(1).Name = "Hyperlink.URL"
    args1(1).Value = "http://www." + LCase(strSelectedWord) + ".com/" 'Zadat buňku s url"
    args1(2).Name = "Hyperlink.Target"
    args1(2).Value = ""
    args1(3).Name = "Hyperlink.Name"
    args1(3).Value = strSelectedWord 'zadat buňku s názvem hypertextu
    args1(4).Name = "Hyperlink.Type"
    args1(4).Value = 1
    dispatcher.executeDispatch(document, ".uno:SetHyperlink", "", 0, args1())
end sub

#2 Re: Calc » hyperlink - úprava viditeľného textu » 24. 3. 2026 15:46:04

Pokud je "Hyperlink" bezchybný je plně funkční, ale nemá zvýraznení tak jako "Hypertextový odkaz". Ukázky příkladů:

Zpět na začátek	=HYPERLINK("#Úvod.A1";"Zpět na začátek")
Klepněte sem =HYPERLINK("http://www.example.org";"Klepněte sem")

Takže stačí naformátovat vzorec nejlépe na tmavomodré tučné a podtržené písmo (nebo i buňky s bledě modrým podkladem pokud hyperlink nepřesahuje buňku.


Takže recept na úpravu viditelného textu: Dejte kurzor do buňky ve které je hyperlink a v příkazové řádce (nad tabulkou tam kde je vidět obsah buňky) jednoduše dopište, nebo přepište co je potřeba.


Avšak nabízí se také jiné vysvětlení Vašeho dotazu. Úprava "Hyperlinku" je snadná. Obtížnější je upravit "Hypertextový odkaz". Myslím si, že jste zaměnil pojmy (hypertext a hyperlink) a jde jde právě o tento postup. Řešení: Postavte se kurzorem na buňku ve které je Hypertextový odkaz. Zvolte VLOŽIT > HYPERTEXTOVÝ ODKAZ. Otevře se dialog ve kterém upravíte text - následně potvrďte použít a OK.

#3 Re: Calc » Chyba 539 ve vzorci Vyřešeno » 12. 1. 2026 10:16:16

Ještě mne napadlo, že chyba bude v syntaxi zápisu, protože maticové vzorce se zapisují například takto: ={1;2;3|4;5;6}. Proto je v nápovědě uveden příklad nepodporovaného obsahu pole ={1+2}. Správně by to mělo být pole větší nežli 1 buňka. Existují zejména složitější konstrukce.

#4 Re: Calc » Chyba 539 ve vzorci Vyřešeno » 12. 1. 2026 07:57:35

jirasek1944 napsal(a)

Potřebuji propojit  buňku A1, listB1, soubor B1 do buňky A1, list A1, soubor A1. . Do buňky A1, list A1, soubor A1 jsem napsal vzorec :
={=DDE("soffice";"c:\users\josef\documents\b1.ods";"listb1.a1")}

Naběhla chyba 539, což by dle nápovědy LibreOffice mělo znamenat : 539
   

Nepodporovaný obsah vloženého pole   Například, ={1+2}539  Nepodporovaný obsah vloženého pole   Například, ={1+2}

Nerozumím tomu, co je v mnou zmíněném vzorci chybného. Pora´dte mi prosím někdo.

Popis není srozumitelný:
Zejména nelze pochopit proč užíváte DDE k propojení jistů ve stejném sešitě. Propojení DDE se používá k propojení mezi různými sešity Calc, respektive mezi různými dokumenty.
     Bylo by logické propojit [dokument1 (A1.ods), ListA1, buňka A1] s [dokumentem2 (B1.ods), ListA1 buňka B1] (a třeba i opačně). Jako chybu také vidím stejné označení dokumentu (b1.ods) s buňkou b1 a ještě navrch také listb1. Zadání nedává smysl : Potřebuji propojit  buňku A1, listB1, soubor B1 do buňky A1, list A1, soubor A1. protože to vypadá na propojení pouze v rámci jediného dokumentu.


Podle zápisu ={=DDE("soffice";"c:\users\josef\documents\b1.ods";"listb1.a1")} používáte maticový vzorec. Ten se používá na obtížná zadání - například pro souhrny s výběrem a podobně - nikoliv pro přenos hodnoty jedné buňky.


Domnívám se, že chyba bude právě ve špatně zapsaném volání. Nejspíš voláte pomocí DDE stejný sešit, nebo něco podobného.

#5 Re: Calc » Trvalé odčítání - skladové zásoby VYŘEŠENO!! » 10. 12. 2025 07:20:14

DavidChlup napsal(a)

Jde mi o ten okamžik, kdy přeprat (archivovat) hodnotu, jestli jde udělat na to nějaké grafické tlačítko, které budu kurzorem mačkat, nebo se to dělá pomocí příkazu...? Jde u toho rovnou spustit příkaz pro tisk? Zítra se dostanu k pc a můžu poslat ukázku.

Ano jde to. K příkazu "tisk" se přiřadí ještě událost makro, ale doporučuji po tisku hned obsah dodáku smazat, nebo se udělá samostatné tlačítko, kterým se spustí tisk a nastavení nového stavu zásob...


Promyslete dobře pořadí co se má udělat. Může to být i více úkonů nežli zatím požadujete, ale explicitně.

#6 Re: Calc » Trvalé odčítání - skladové zásoby VYŘEŠENO!! » 9. 12. 2025 19:25:00

DavidChlup napsal(a)

Jednoduše řečeno: mám v calcu vytvořenou skladovou ovidenci, v druhé kartě mám vydejku ze skladu. Na skladě budu mít nějaké zboží, např kondomy 40ks. A teď udělám výdejku ze skladu na druhé kartě, třeba kondomy 5ks, takže ze skladu se 5 odečte a bude jich tam 35. A teď potřebuji nějaké kouzelné tlačítko nebo funkci, aby mi uložila hodnotu toho skladu i po smazání dat z té výdejky a nevracelo se to na původních 40.

Srozumitelné to je: Vzorec odečte počet z výdejky. Po smazání výdejky se číslo vrátí do původní podoby, protože se odečítá nula.


Možností je několik.
Nejlepší by to bylo asi makrem, které načte vzorec a udělá z něj novou výchozí hodnotu skladu. Je otázkou kdy to udělat. Pokud se to neudělá těsně před vytištěním (archivaci) objednávky tak by snížený základ ukazoval ještě jednou odečet.


Makro se dá snadno nahrát: například buňka A1 obsahuje zásobu a A2 vzorec který načítá rozdíl zásoby a výdejky. Jakmile načteme makrem A2 vložíme ho jen jako hodnotu do A1. Tohle je popis manuálního zafixování, ale úplně stejně nahrajeme makro. Makro potom musíme spustit buď manuálně podle potřeby, nebo navázat na uložení (archivaci) objednávky.


Pokud neumíte pracovat s makry, pošlete mi ukázku. Musíte nejméně umět zprovoznit makra - podle návodu. Nebudu fabulovat jména listů, položky a podobně.

#7 Jak pracovat s portálem » Problém úložiště » 19. 8. 2025 08:06:40

neutr
Odpovědí: 0

Nevíte někdo náhodou o úložišti pro využítí na tomto fóru?

Na zdejším portále bylo kdysi úložiště které fungovalo jako u jiných podobných portálů a fór například anglické, francouzské a snad všechny jiné. To bylo zrušeno ačkoliv mělo i poté v nějaké omezené míře fungovat. Potom jsem používal "Uložto.cz", které začalo být problematické někdy v době kovidu a dnes asi nefunguje vůbec. Podobně na tom jsou i jiná úložiště. Problém bývá s ukládáním zdarma (bez registrace). Často fungují na omezenou dobu několik měsíců pokud ne týdnů, respektive dní.

Takže mne zajímá zda nevíte o nějakém vhodném - mělo by jich být dost. Předpokladem je přístup zdarma (nejlépe nepřihlášeným uživatelům) a dobou uložení nejméně rok.


Jiným řešením by byl portál, který sice vyžaduje přihlášení jako uživatel, ale je zdarma. Opět je důležitá doba po kterou se uložené soubory archivují zdarma.


Pokud by se našel takový portál možná by se v něm dala udělat uzavřená skupina pro uživatele tohoto portálu (není podmínkou). Potom bychom doporučili, aby se k takvému úložišti přihlásili uživatelé fóra tohoto portálu.


V krajním případě najít co nejlacinější úložiště, ale existuje ještě jiná varianta: Najde se někdo, kdo by provozoval například eshop na kterém by se prodávaly přístupy k přílohám v malých korunových hodnotách? To znamená nahrávání placených přístupů ke kopii dotazu zdarma. Konkrétně přístup k otázce a k tomu přílohy. Eshop by zadání dotazu uložil jako náhled "na produkt" a za malý obolus umožnil stáhnout celý příspěvek včetně příloh.

Těším se na zpětnou vazbu

#8 Re: Calc » Ochrana kódu makra heslem "VYŘEŠENO" » 19. 8. 2025 07:25:56

Eddie60 napsal(a)

1) Pokud knihovnu s makrem pro spuštění hlavního makra z zaheslované knihovny zahesluji, makro nefunguje.
2) Šlo by makro upravit tak, aby předvyplnil uživatel např. "Ruda" a heslo "5784" bez listu role?


Ad 1: To jsem nezjistil, ale to možná dělá nahrané zamykání se skrýváním a nebo struktura listu. Když nahrajete něco konkrétního tak se v kódu objeví zakomantovaný ředek REM ......... To REM se musí smazat. Když byste měl o tento postup zájem, udělám k tomu makro.


Ad 2: Ano řešení je zde:

Sub NazevMakra
 Dim Doc As Object
 Dim Sheet As Object
 Dim jmeno, heslo As string
 Dim Ar_jmeno(5), Ar_heslo(5) as variant 'Deklarace počtu položek v databázích array - počítá se od nuly
 Ar_jmeno=array("Petr","Karel","Simona","Tonda","Věra","Karolína")
 Ar_heslo=array("1165","k3589","1289Brno","TonVokurka","123","KarelGott")
 ' v databázi array je spárované jméno a heslo pořadím, příklad jméno Petr má heslo 1165, Věra má heslo 123
 Doc = ThisComponent
 jmeno = InputBox("Zadej uživatelské jméno")
 heslo = InputBox("Zadej přístupové heslo")
 'Sheet = Doc.getSheets().getByName("Role")
 For i = 0 To 5 'iteruje od nuly do 5, celkem 6 výrazů. Pokud by bylo 100 výrazů je to 0 To 99. 
 'Číslo 5 v našem případě musí být totožné s čísly Ar_jmeno(5), Ar_heslo(5)
  IF Ar_jmeno(i) = jmeno And Ar_heslo(i) = heslo Then
  SpustitZaheslovaneMakro("Heslo k původní knihovně")
 MsgBox("Všechny operace byly provedeny", 1 , "Úspěšné zakončení")
 GoTo Hopsahejsa
 end IF 
 Next i
 MsgBox("Špatné uživatelské jméno, nebo heslo", 16 , "Chyba") 
Hopsahejsa:
End Sub

Testoval jsem to a u mne funguje (stejně jako předchozí verze).


Raději bych Vám poslal hotové soubory v balíku ZIP, jsou ale problémy s postnutím přes externí portál. U nás to už nejde mnoho let, "Ulož.to" fungovalo mizerně a nyní už asi nefunguje vůbec. Takže jsem na tyto způsoby zanevřel. Pokud byste chtěl celé vzorové soubory, tak jedině emailem. Dám sem na portál dotaz zda někdo ví o externím úložišti. Já mám Google disk (stejně tak to mohou být osobní úložiště typu BOX aj.), ale dávat tam na neurčito přílohy z tohoto fóra se mi nelíbí, protože za rok už nebudu vědět k čemu jsou určeny. Plnil bych si svůj prostor, který nemusí mít dlouhého trvání - je mi přes sedmndesát :-(

#9 Re: Calc » Ochrana kódu makra heslem "VYŘEŠENO" » 18. 8. 2025 19:34:03

Myslím, že chyba spuštění spočívá v příkazu Call SpustitZaheslovaneMakro(Vaše heslo). Stačí pouze SpustitZaheslovaneMakro(Vaše heslo k původní knihovně v uvozovnách). Tedy SpustitZaheslovaneMakro("heslo").

Problém může být v tom, že nové makro načítá heslo z deklarace Dim jmeno, heslo as string a nikoliv heslo které používáte standardně. To Vaše heslo zapište pouze do SpustitZaheslovaneMakro("heslo") aby nedošlo k načtení hesla pro přístup uřivatele. Otestujte a napište.

#10 Re: Calc » Ochrana kódu makra heslem "VYŘEŠENO" » 18. 8. 2025 10:38:33

Zde je makro:

Vytvoření nové zašifrované knihovny


V dialogovém okně NÁSTROJE > MAKRA > SPRÁVCE MAKER > BASIC...> ORGANIZÁTOR > KARTA KNIHOVNY > roletka UMÍSTĚNÍ > vybrat knihovnu pod jménem SEŠITU ve kterém má být knihovna (pozor je tam výběr na nadřazení knihovny) > tlačítko NOVÁ do které zadáte název pro novou knihovnu (nesmí být název "Standard", ani název exitující šifrované knihovny).


Po tomto hned raději zavřete dialog organizátoru. Máte vytvořenou novou knihovnu kterou uvidíte v okně Basicu pod knihovnou Standard. Pokud ji neuvidíte, stala se chyba. Zatím je odemčená.


Otevřete okno module1 z čerstvě vytvořené knihovny. Tam zkopírujete následující makro, uložte. Můžete otestovat volání z knihovny standard a popřípadě přizpůsobit.

   
Dim jmeno, heslo as string

 Sub NazevMakra 'Zvolit takové, aby nemělo souběh s jinými makry zejména v té primární zašifrované knihovně.
 
 Dim Doc As Object
 Dim Sheet As Object
 Dim Cell1, Cell2 As Object
 Doc = ThisComponent
 jmeno = InputBox("Zadej uživatelské jméno")
 heslo = InputBox("Zadej přístupové heslo")
 Sheet = Doc.getSheets().getByName("Role")
 For i = 0 To 100
 Cell1 = Sheet.getCellByPosition( 0 , i )
 Cell2 = Sheet.getCellByPosition( 1 , i )
 IF Cell1.string = jmeno And Cell2.string = heslo Then
 Call SpustitZaheslovaneMakro(heslo)
 Exit sub
 end IF 
 Next i
 MsgBox("Špatné uživatelské jméno, nebo heslo", "Chyba")
End Sub 

Po odzkoušení můžete novou knihovnu uzmknout výše popsaným postupem, jen místo NOVÁ (knihovna), zvolíte HESLO. Po zadání hesla je lepší sešit restartovat (neuložené změny kdysi nefungovaly ale i tak je lepší sešit vypnout a hned znovu spustit. Následně otestujte zda uzamčení funguje. Když v okně IDE poklepete na novou knihovnu musí zobrazit dialog hesla.


Tak to je první fáze. Druhá fáze je vytvoření sešitu ROLE, kde budou uživatelská jména a vedle nich hesla takto:
ID uživatele ve sloupci může být jméno. Lepší jsou pro člověka čísla, ale ta používám ve sloupci B jako hesla. Skutečná jména by tam být neměla aby člověk s nečistými úmysly nemohl snadno navolit jméno kolegy a pak mu stačí testovat jen heslo. Mohou to být i čísla, ale musel by se přepsat kód Cell.string na Cell.value.


sloupecA[[RJRZ], sloupecB[314542]
sloupecA[NDROT], sloupecB[970529]
sloupecA[YXYOK], sloupecB[508395]
sloupecA[HKVHW], sloupecB[398581]
sloupecA[[KMXC], sloupecB[511388]
sloupecA[UUWXU], sloupecB[035779]
sloupecA[[TQGY], sloupecB[866051]
sloupecA[YDYRQ], sloupecB[343888]
sloupecA[JQADY], sloupecB[365604]
sloupecA[LZSNT], sloupecB[456968]
sloupecA[KYCAA], sloupecB[603248]
sloupecA[XBLYJ], sloupecB[755436]
sloupecA[QDJCN], sloupecB[878795]
sloupecA[RBIKC], sloupecB[652612]
sloupecA[FYHAG], sloupecB[942417]


Může to být i obráceně ale vždy by to měly být textové znaky (i když půjde o čísla - předejte na začátek například R12A - například místo RUDA). Sloupec A seřaďte vzestupně (kvůli lepšímu prohledávání zejména u dlouhých seznamů). Do sloupců C a dále můžete přidat skutečné jméno a podobně.


Nakonec si můžete nahrát záznamníkem makro na uzamčení a skrytí listu ROLE. Nesmíte ho zapomenout otevřený a odejít od stroje. Vždy znovu pečlivě zkontrolujte, zda je okno ROLE skryté a ještě také že jsou uzamčené změny. Můžete také uzamknout celou strukturu sešitu a pak nikdo nemůže otevřít ani náhodou skrytý sešit, byť uzamčený.


K tomu to návrhu jem dělal mnoho variant. Například místo InputBoxů 1 dialogové okno kde se místo znaků zobrazovaly tečky jak je u hesel obvyklé. Další varianta uchovávala i přístupovou databázi v makru a ne v sešitě protože dříve se stávalo, že zaheslované listy i skryté listy se po otevření v Excelu zobrazily bez uzamčení a neskryté.


Otestujte a uvidíte zda to takto stačí. Šlo by to jinak na dost různých způsobů.

#11 Re: Calc » Ochrana kódu makra heslem "VYŘEŠENO" » 18. 8. 2025 09:04:45

Tak jsem chvíli přemýšlel a přišel na maličký problém. Každé makro z uzamčené knihovny spouštíte samostatně:
Sub SpustitZaheslovaneMakro()
    LibraryEK.Module1.SjednotZahlaviADupliku()
    LibraryEK.Module5.NajdiCenySOkolnimiHladinami()
    MsgBox "Hotovo.", 64, "Dokončeno"
End Sub
     Potvrďte mi že to spouštíte takto zadáním hesla:
Sub SpustitZaheslovaneMakro()
    LibraryEK.Module1.SjednotZahlaviADupliku(heslo)
    LibraryEK.Module5.NajdiCenySOkolnimiHladinami(heslo)
    MsgBox "Hotovo.", 64, "Dokončeno"
End Sub
    To je posloupnost příkazů které něco předělají a skončí. Vy nebo jiný uživatel si následně úpravy prohlédnete. Když by bylo takových, nebo podobných posloupností více (X) k různých druhům úprav tak to zřejmě uděláte přes novou zašifrovanou knihovnu do které dáte všech X variant. Souběh uživatelů je zřejmě málo pravděpodobný, což je sázka do loterie. I Tak je nutné aby vaše řešení obsahovalo ještě 1, nebo 2 řádky takto:
Sub SpustitZaheslovaneMakro()
    LibraryEK.Module1.SjednotZahlaviADupliku(heslo)
    LibraryEK.Module5.NajdiCenySOkolnimiHladinami(heslo)
       ThisComponent.Store()
    MsgBox "Hotovo.", 64, "Dokončeno"
       ThisComponent.Close()
End Sub
     Nyní se pustím do té knihovny a bude tam mimo kódu hodně popisu takže si netroufnu odhadnout čas, ale snad budou stačit 2-3 hodiny. Mezi tím bych rád dostal zpětnou vazbu na způsob umístění a práce více lidí současně? Je možné, že skupina uživatelů se bude zajímat jen o některé druhy maker. Například někdo jen přidá data do databáze a jiný ji bude jen kopírovat, ...?

#12 Re: Calc » Ochrana kódu makra heslem "VYŘEŠENO" » 17. 8. 2025 18:18:11

Eddie60 napsal(a)

Dobrý den,
děkuji za odpověď. Líbí se mi "PS:", protože heslo k otevření kódu makra sdílet nechci.
Zaheslovanou knihovnu LibraryEK s makry spouštím pomocí nakra v knihovně Standard.Module1:
Sub SpustitZaheslovaneMakro()
    LibraryEK.Module1.SjednotZahlaviADupliku()
    LibraryEK.Module5.NajdiCenySOkolnimiHladinami()
    MsgBox "Hotovo.", 64, "Dokončeno"
End Sub

Mohu vytvořit zaheslovanou knihovnu, např. "psw".
Nevím, jak vytvořit makro s heslem, které by otevřelo uzamčenou knihovnu LibraryEK.


Zítra se na to mrknu. Není to nic složitého. Kolik chcete udělat přístupů? Může to být klidně několik set lidí. Budou se muset přihlásit například číslem zaměstnance a k tomu si budou muset pamatovat heslo - každý bude mít jiné.


Vy budete admin, který se přihlásí a může odemknout knihovnu pro editaci přístupových dat. Já mohu udělat knihovnu která nebude uzamčená a Vy si ji načtete už hotovou. Jenom ji po otestování uzamknete. Heslo ke knihovně musíte přidat do makra ještě před uzamčením. Ale pokud to takto nechcete můžete ji otevírat standardně.


Dokonce mohu vytvořit makro raport pro evidenci přístupů - kdo a kdy, od kolika a do kolika hodin se sešitem pracoval. Jde o list, který je normálně skrytý pod heslem. Vejde se tam mnoho záznamů pro celý rok. Počítejte s problémem když by se sešitem chtělo pracovat více lidí současně. Mělo by to jít, ale to jsem netestoval, takže nevím. Jde o to zda bude sešit někde na serveru jako sdílený, nebo jestli bude mít každý stroj (pracovník) svou instalaci.


     Já Myslím, že jsme už byli v kontaktu, takže pokud se nemýlím můžeme přímo kumunikavat přes Google. Pokud nikoliv pod tímto příspěvkem je email. Myslím, že tušíte opakované ladění. Protože se mohou vyskytnout různé nečekané problémy.

#13 Re: Calc » Ochrana kódu makra heslem "VYŘEŠENO" » 15. 8. 2025 20:07:58

Pokud vím tak makra ze zaheslované knihovny jdou spustit normálně bez hesla. Nedají se jen otevřít pro editaci kódu. Může se stát, že uvnitř zaheslované knihovny je kód hesla - sám jsem udělal hodně takových které po spuštění vyhodí dialog pro heslo. Tak tohle s obejít nedá. Je nutné zaheslovanou knihovnu editovat a heslo odstranit, nebo heslo sdílet s kolegy. Když byste dokázal po zadání hesla knihovnu otevřít tak byste mohl dostat knihovnu bez takového hesla. Mnoho zdejších uživatelů by to dokázalo udělat když sem zadáte kód makra.


PS:
Tedy šlo by vytvořit druhou zaheslovanou knihovnu, která by obsahovala heslo do původní heslované knihovny. V tom byste mohl přidat i více hesel pro různé lidi a uměl byste určité přístupy měnit. Ve složitější variantě by to byla role admina, která by přepisovala přístupy z běžného prostředí - vyskakující dialog ap.
     Tedy původní makro z nezaheslovaného adresáře by zavolalo nově přidaná makra v heslované knihovně a tato by pak otevřela původní zaheslovanou knihovnu.

#14 Re: Calc » Problémy s podmíněným formátováním v LO calc 25.2.4.3 » 4. 8. 2025 18:02:04

MilanB. napsal(a)

Zdravím všechny.
Nevíte někdo, proč mi LO CALC při podmíněném formátování (podbarvení dnů víkendu):
Podmínka 1 - Vzorec je - $I11>5 - Použít styl - Víkend (nadefinovaný styl)
přepisuje obsah buňky na "PRAVDA" (u opačné hodnoty k přepisování nedochází)?
Stejný výsledek je u přímého vzorce: WEEKDAY(A11;2)>5.

Příčin problému může být více. Nejpravděpodobnější asi bude formát čísla datumů. Doporučil bych zkontrolovat a popřípadě přestavět datumy. Ty mohou být zapsány jako nestandardní textová forma. To se stává při převodu například z CSV, TXT, nebo manuálním zadáváním.


Doporučuji prověřit buňky s datumem pomocí jiné (pomocné) buňky kam zadáte =DateValue(buňka), nebo =IsNumber(buňka), může to být dotaz na TYPE, nebo jen Value(). Když je v buňce číslo dostanete pozitivní odpověď. V jiném přípědě buď chybu, nebo False namísto True.


Někdy bude potřeba složitější oprava, ale to je téma mimo dotaz.

#15 Re: Calc » Skok na buňku odkazovanou ve vzorci - VYŘEŠENO » 3. 7. 2025 14:51:14

jirii napsal(a)

Děkuju za odpověď a nabídku řešení, ale jde jen čistě o to když člověk dohledává konkrétní buňky ze vzorce za účelem kontroly načítaných hodnot v rozsáhlé tabulce kde už není vidět všechno na obrazovce, případně je to na jiném listu...

K takovému účelu slouží "Detektiv" z nabídky NÁSTROJE > DETEKTIV > PŘEDCHŮDCI, nebo NÁSLEDNÍCI.

#16 Re: Calc » Skok na buňku odkazovanou ve vzorci - VYŘEŠENO » 3. 7. 2025 14:00:35

Problém je v tom, že odkazované buňky ze vzorce načítají obsah a neslouží primárně k přemístění kurzoru (fokusu). K přemístění lze použít například:
- Zadání buňky v kolonce Pole Názvu (těsně nad tabulkou),
- Předem definovat úsek jako Pojmenované oblasti a výrazy z nabídky LIST.
- Použít vzorec Hyperlink například =HYPERLINK(A5,"Hopsa")
- Použít Hypertextový odkaz Ctrl+K

#17 Re: Calc » Makro na Seskupit... (F12) » 14. 5. 2025 15:42:25

Základní řešení pro seskupit jednu skupinu:

Sub DejMatici
Dim oCell As Object 
oCell = ThisComponent.CurrentController.getSelection() 
With oCell.RangeAddress 
SH = .Sheet 
SC = .StartColumn 
SR = .StartRow
ER = .EndRow
End With 
SeskupitRows(SH, SC, SR, ER) 
End Sub

Sub SeskupitRows(ByVal SH as integer,ByVal SC as long, ByVal SR as long, ByVal ER as long)
	Dim oDoc as Object
	Dim oSheet as Object
	Dim oCellAdr as Object
		oDoc = ThisComponent
		oSheet = ThisComponent.currentcontroller.activesheet
		oCellAdr = createUnoStruct("com.sun.star.table.CellRangeAddress")
		with oCellAdr
			.Sheet = SH
			.StartColumn = SC
  			.StartRow = SR			
  			.EndRow = ER			
		end with
		oSheet.group( oCellAdr, com.sun.star.table.TableOrientation.ROWS )
		msgbox("Seskupeno",0,"Hotovo")
End Sub

Šlo by to postavit na celý výčet, ale nevím například zda poslední případ - položka 47 se má udělat do jednoho seskupení nabo do dvou (řádky 32 až 41).
     Mělo by to fungovat na každém aktivním souboru, sešitu i listu tak, že vyberete úsek a spustíte makro. Jde o řádky takže je jedno ve kterém sloupci uděláte výběr.


     Pokud to takto postačuje můžete makro zadat do šablony a otevírat přímo šablonu už s funkčními makry, nebo si to nakopírujte do "Moje makra LO" a vždy to raději nakopírujte přímo do sešitu i když se to dá deklarovat pro všechny sešity jako "Global" a podobně.

#18 Re: Calc » Makro na Seskupit... (F12) » 14. 5. 2025 05:06:07

To by neměl být velký problém, ale chce to ukázku dat. Pošlete mi vzorek na email níže. Peníze nechci.

#19 Re: Writer » řidání stylu do načteného dokumentu z formátu doc » 19. 3. 2025 18:49:27

Podívejte se do nového (prázdného) Writeru jestli tam už nemáte formát Obsah 1. Myslím, že byste měl přejmenovat tak aby názvy nekolidovaly. Je možné, žebyste měl extrahovat jednotlivé styly a přejmenovat je. Například styl písma, odstavce, rámečků, barvy ap. - a zadat vždy unikátní název. Stejně tak všechny ostatní styly které tam najdete. Měly by se dostat do "vlastních stylů".

#20 Re: Náměty, nápady aneb Je tu vše, co hledáte? » Jak a kam zadat požadavek na novou vlastnost/funkci (Feature request)? » 9. 12. 2024 18:50:12

imcon napsal(a)

....
Není možné si hrát s barvičkami, dělat meziselekce pomocí jiných zástupných metod (ne že bychom to neuměli ale je to nepraktické a pomalé). Také je možné při těchto vícektokových postupech udělat chybu. A navíc výsledek potřebujeme na pár desítek sekund pak se filtruje zase něco jiného....

Nemám dojem, že by to bylo o mnoho delší pomocí barev:
     Zadáme automatický filtr a uděláme výběr. Pokud potřebujete negaci tohoto výběru označíte barvou vybrané a v zápětí zadáte ve filtru řadit podle barvy. Podbarvené řádky jsou nahoře a ten zbytek je negativní výběr, který Vás zajímá. Není problém například pozitivní výběr smazat (po seřazení a vypnutí autofiltru) a pokračovat v selekci na zbytku, nebo nemazat a obarvit vedlejší sloupec podle nového hledání. Jedno hledání pomocí barev je pomalejší o dva kroky - barvení výběru a odebrání automatického výběru.
     Pokud se Vám to zdá mnoho zbytečných kroků, tak je možnost vše zabudovat do makra, které může celou manuální operaci omezit jen na zadání podmínek filtru a místa kde dojde k matematickým testům.
     Pokud by se jednalo o stejné (opakující se operace testů), tak by makro mohlo automaticky vyhodnotit podmínku i test - stačí zadat a 1x kliknout, nejvýš zadat kam se uloží výsledek k vizuální kontrole a automatický filtr se nebude vůbec aktivovat.


PS Barevný filtr se dá pro třídění zadat přímo jako výběr implicitního pozadí - tedy jako negativní výběr s barvou.

#21 Re: Náměty, nápady aneb Je tu vše, co hledáte? » Jak a kam zadat požadavek na novou vlastnost/funkci (Feature request)? » 9. 12. 2024 09:32:09

imcon napsal(a)

....
Často ale dochází k tomu, že ručně uživatel vybere nějaké položky, zpracuje je a pak potřebuje udělat jiné zpracování na inverzním výběru. A v tomto okamžiku inverze výběru velmi schází. .....


     Potom je nejrychlejší cestou automatický filtr odstranit a nastavit znovu nový. Například u kontingenčních tabulek je běžnou operací uložit výběr podle filtru do nového umístění (listu), zadat jiný filtr a opět výsledek uložit kam je libo.


     Něco podobného lze dělat pomocí barev v jednotlivých sloupcích. Postavíte automatický filtr a vyfiltrované položky v prvním (nebo jiném sloupci) obarvíte. Následně odsatraníte automatický filtr : DATA > AUTOMATICKÝ FILTR, tedy stejně snadno tak jak jste ho zadal. Jakmile automatický filtr zmizí, řádky se rozbalí a vybarvené zůstanou jen ty, které byly viditelné.
     Nyní můžete opět zadat automatický filtr : DATA > AUTOMATICKÝ FILTR, a zadat nový výběr. Ten můžete v jiném sloupci vybarvit jinou barvou.
     Trik je v tom, že vybarvujete celý sloupec tabulky, ale obarvené zůstanou jen viditelné řádky. Takže potom stačí orientace podle barev. Tu lze také podle barev zpětně filtrovat, nebo jen řadit. Pokud filtrujete zůstanou viditelné jen řádky s vybranou barvou (pokud je ve stejném sloupci více barev). Pokud "řadíte podle Barvy" všechny řádky jsou viditelné a nohoře jsou seřazeny řádky podle barev (i pokud jich je ve sloupci více).

#22 Re: Náměty, nápady aneb Je tu vše, co hledáte? » Jak a kam zadat požadavek na novou vlastnost/funkci (Feature request)? » 8. 12. 2024 14:45:10

Neznám nic podobného. Je to spíš zadání pro vývojáře, nebo programátory.

     Pokud se jedná o obecně inverzní funkce, tak některé jsou obsaženy - například umocňování a odmocňování, nebo logaritmování a odlogaritmování, ale v popisu se tato vlastnost přímo nenalézá pod pojmem "inverzní".

     Pokud se jedná o inverzní filtry tak je to velice objemné téma. Myslím, že obecné řešení není možné. Vždy musí být zadán konkrétní filtr, aby šlo vytvořit inerzní variantu. On i pojem filtr je víceznačný. Může jít například o filtr hodnot ve statistickém souboru, nebo filtr formátů - například pro převod mezi soustavami, nebo filtr barev a další.

     Pokud máte na mysli invertování určitého výběru je inverzí původní úplný seznam ze kterého jsou původně vybrané hodnoty obebrány. To není tak těžké. Stačí zavést indexy (pokad už v seznamu nejsou) a podle původně vbraných indexů smazat zdrojový seznam. Potom už můžeme například invertovaný seznam znovu filtrovat. Jde například o "Erastenovo síto" k hledání všech prvočísel a jiné podobné procedury.

     Pokud potřebujete nějaký konkrétní úkon dejte mi vzor a popište co se má dít.

#23 Re: Calc » smb versus file » 22. 11. 2024 15:01:01

Cestou by mohly být automatické opravy. Tedy automatická změna "smb:" > "file:" nejlépe u některého z obou typů strojů. Windows "smb:" > "file:" a Linux opačně "file:" > "smb:" i když ten to umí zřejmě nativně.


     Také by mělo být možné pomocí makra ukládat v původní podobě. To by znamnalo udělat v Linuxu makro které ukládá na server a změnilo by v řetězci smb za file. Také možná existuje více jiných možností.
     Možná by pomohlo najít stejnou notaci v nastavení vzorců v Linuxu, to si ale nemohu ověřit. Otestujte nastavení NÁSTROJE > MOŽNOSTI > LIBRE OFFICE > KOMPATIBILITA > HYPERTEXTOVÉ ODKAZY.

#24 Re: Calc » Lámání textu v buňkách » 14. 11. 2024 19:40:05

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.

#25 Re: Calc » Lámání textu v buňkách » 14. 11. 2024 14:47:28

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.

Zápatí

Používáme FluxBB