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

#1 30. 6. 2021 08:26:21

imcon
Člen
Místo Brno
Registrace: 16. 5. 2007
Příspěvků: 202

Pomoc s automatizací vytváření XLS souborů z tabulky v LO Calc

Dobrý den,
potřebovali bychom udělat jednoduché makro/tlačítko v souboru Calc, které by vytvořilo a uložilo nový XLS soubor, který by byl jako jedna vyplněná záložka ze souboru Calcu.

Popíši podrobněji, určitě poradíte:

1. Máme tabulku se sednamem položek a nějakými údaji (cca 100 řádků), tu potřebujeme průběžně ručně doplňovat. Toto by třeba byla jedna záložka.

2. Uvažujeme, že po stisku tlačítka by makro prošlo tuto tabulku, podle nějaké podmínky (tatum platnosti řádku) by daty z tohoto řádku vyplnilo druhou záložku (která je nějak formátována podle požadavků našich partnerů).

3. Pak potřebujeme vytvořit nový XLS soubor, který by byl vlastně jen ta vyplněná záložka z druhého kroku (a nějak ho pojmenovat podle data a nějakých údajů ze zpracovávaného řádku)

Nepůsobí to složitě, připravovali jsme toto v QT ale nejsou na LO funkční knihovny... množná by to v makru LO bylo jednodušší.

Offline

#2 30. 6. 2021 09:00:07

luka7
Člen
Registrace: 20. 5. 2009
Příspěvků: 84

Re: Pomoc s automatizací vytváření XLS souborů z tabulky v LO Calc

na doplnění funkci vlookup.
co se exportu týče: https://www.openoffice.cz/doplnky/pokro … t-a-import

Offline

#3 30. 6. 2021 09:32:30

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

Re: Pomoc s automatizací vytváření XLS souborů z tabulky v LO Calc

Počítám že pojmem "záložka" myslíte název listu - jak je to v dolní části Calcu -> nejprve větší plus (+) a pak třeba List1, List2, List3 atd.


Potřeboval bych ujasnit o co vám přesně jde. V jednom listu máte v jednom sloupci nějaké údaje a ve druhém datumy. Z toho potřebujete dostat řádky které vyhovují jen určitým datumům -> to se dá udělat jednak nějakými podmínkami v makru, nebo se to dá udělat třeba Standartním Filtrem (který je tedy možno použít i v makru). Ovšem když to bude v makru, tak by možná bylo vhodné mít nějaký inputbox s předvyplněným datumem který byste třeba potvrdil nebo změnil.

Poté tato vyfiltrovaná data chcete zkopírovat do druhého listu a tento druhý list uložit jako XLS soubor pojmenovaný dle nějakých kritérií.


Jenže co chcete zkopírovat do toho druhého listu? Jen ten 1 sloupec, nebo i ty datumy? Nebo je to více sloupců? A je třeba dodržet šířky sloupců a výšky řádků? A v tom listě kam bude kopírováno a který bude exportován do XLS, tam je potřeba nějaká data ještě nějak naformátovat?


Zde je ukázka jak zkopírovat (přidat) nějaký rozsah buněk do nového listu včetně dodržení formátů i šířek a výšek buněk. Ten exportní list je pak možno exportovat do PDF.

https://ask.libreoffice.org/en/question … -id-312033


Když nasdílíte nějaký ukázkový soubor třeba jen s deseti řádky i s tím jak má vypadat ten exportovaný list, tak by to myslím nemělo být těžké předělat vám na míru :-).

Offline

#4 30. 6. 2021 09:58:05

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

Re: Pomoc s automatizací vytváření XLS souborů z tabulky v LO Calc

Pokud potřebuji uložit nějakou část do xls, pak nejdřív otevřu nový prázdný soubor, do něho překopíruji vybraná data a následně soubor uložím jako xls. Nevím zda to lze jinak (ukázka níže není asi bezchybná, je to výňatek z většího celku) spíše pro inspiraci


'promene ulozeni knihy do xls
dim file as string
dim secDoc as object, secList as object
dim vlsoubor(1) as new com.sun.star.beans.PropertyValue
dim jmsoubor(1) as new com.sun.star.beans.PropertyValue


  vlsoubor(0).Name = "Hidden"
  vlsoubor(0).Value = True
  vlsoubor(1).Name = "MacroExecutionMode"
  vlsoubor(1).Value = 4

  jmsoubor(0).Name = "FilterName"
  jmsoubor(0).Value = "MS Excel 97"
  jmsoubor(1).Name = "Overwrite"
  jmsoubor(1).value = True

file = convertToURL(sPATHk)
secDoc = StarDesktop.loadComponentFromURL("private:factory/scalc", "_Blank", 0, vlsoubor)
secList = secDoc.Sheets(0)
       		
kniha_copy = s3.GetCellRangeByPosition(52, 2, 78, 2 + radku).getDataArray
secList.GetCellRangeByPosition(0, 0, 26, 0 + radku).setDataArray(kniha_copy)
			
seclist.GetCellRangeByPosition(1, 1, 2, radku).NumberFormat = 50 '40 je HH:MM, 41 je HH:MM:SSS 50 je DD.MM.RR HH:MM
seclist.GetCellRangeByPosition(8, 1, 8, radku).NumberFormat = 10 '10 jsou procenta bez desetinych mist
seclist.GetCellRangeByPosition(23, 1, 23, radku).NumberFormat = 10 '10 jsou procenta bez desetinych mist
			
'4 je oddělené tisíce a dvě desetinná místa
for col = 0 to 26
seclist.columns(col).OptimalWidth = True
next col
					
secDoc.storeAsURL(file,jmsoubor)
		    		    
secDoc.Close(True)
	    
			dokument.currentController.setActivesheet(s1)

Editoval ludviktrnka (30. 6. 2021 10:02:16)


LibreOffice 6.2.

Offline

Zápatí