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

#1 Re: Calc » Tipy na zrychlení makro výpočtů » 13. 11. 2024 10:38:56

Už vše funguje, asi to byla jen dočasná chybka ve verzi.

#2 Re: Calc » Tipy na zrychlení makro výpočtů » 24. 9. 2024 11:01:57

kamlan napsal(a)

Je potřeba otestovat existenci listu FAKTURA, to je na začátku a také se tam hned provede přesunutí listu na první pozici.


Když se maže přes .uno:DeleteRows tak je to nejrychlejší, ale musí to být prováděno v aktivním listu. List se aktivuje jednoduše příkazem oDoc.CurrentController.ActiveSheet=oSheet.
Přes API Basicu lze mazat vždy jen jeden rozsah buněk v listu metodou oSheet.removeRange (alespoň co já vím), takže to by bylo pomalejší - byť pak by to bylo naprosto nezávislé na tom který list je zrovna aktivní. Ale za to snížení rychlosti by se to asi nevyplatilo.

Sub NOVE_mazani 'pomocí com.sun.star.Sheet.SheetCellRanges + UNO pro skrýt označené řádky
	on local error goto chyba
	dim oDoc as object, oSheet as object, oRange as object, oRanges as object, oRangeAddress as new com.sun.star.table.CellRangeAddress, oEnum as object, o as object, data(), i&, iSloupec&, i1&, i2&, iSheet%, aSkryt as variant, sList$, oSheets as object
	dim oDlg as object, oPrubeh as object, oButton as object, iPrubeh&, bCancel as boolean 'pro ukazatel průběhu
	const iStep=30 : iPrubeh=0 'pro ukazatel průběhu
	
	oDoc=ThisComponent

	rem test existence požadovaného listu
	sList="FAKTURA" 'jméno listu
	oSheets=oDoc.Sheets 'listy sešitu
	if oSheets.hasByName(sList) then 'sešit list obsahuje
		oSheet=oSheets.getByName(sList) 'požadovaný list
		oSheets.moveByName(sList, 0) 'přesune list na první pozici (tenhle řádek se klidně může dát až na konec, tedy za dispatcher.executeDispatch)
		iSheet=oSheet.RangeAddress.Sheet 'číslo požadovaného listu
	else
		msgbox(sList, 48, "List neexistuje")
		exit sub
	end if
	
	iSloupec=3 'sloupec dle kterého budu skrývat (A=0, B=1 atd.)
	i1=1 : i2=3100 'testované řádky (první řádek=0, druhý=1 atd.)
	aSkryt=0 'hodnota pro kterou skrývám řádek (v případě řetězců třeba "0")
	
	oRanges=oDoc.createInstance("com.sun.star.sheet.SheetCellRanges") 'rozsahy vybraných buněk
	with oRangeAddress 'sloupce přidávaného rozsahu
		.Sheet=iSheet
		.StartColumn=iSloupec
		.EndColumn=iSloupec
	end with
	
		rem ukazatel průběhu
		oDlg=progressBarInit(0, i2-i1, oDoc)
		oDlg.title="Mažu nulové :-)"
		oPrubeh=oDlg.getControl("Pprogress")
		oButton=oDlg.getControl("Pbutton")
	
	oRange=oSheet.getCellRangeByPosition(iSloupec, i1, iSloupec, i2) 'data ze sloupce dle kterého skrývám řádky
	data=oRange.getDataArray
	dim iZac&, iKon&, a as variant, b as boolean
	iZac=i1 : iKon=0 : b=false
	
	rem hlavní smyčka
	for i=lbound(data) to ubound(data)

			rem ukazatel průběhu
			iPrubeh=iPrubeh+1
			if iPrubeh=iStep then 'vykreslovat až po nějakém počtu kroků
				oPrubeh.value=i
				iPrubeh=0 'reset aktuálního počtu kroků
			end if
			if oButton.Model.state=1 then 'stisknuto Cancel v ukazateli průběhu
				bCancel=true
				exit for
			end if

		rem porovnávání hodnot a přidávání do oRanges
		a=data(i)(0) 'aktuální hodnota ze sloupce -- v ukázce jde o číslo; v případě řetězců třeba a=CStr(data(i)(0))
		if a=aSkryt then 'hodnota je skrývaná
			if iKon=0 then iZac=i+i1 'nemám žádný počet řádků tedy jde o první řádek rozsahu tak pamatuji číslo řádku
			iKon=iKon+1 'zvětšuji počet řádků které budu přidávat do rozsahu
			b=true 'až narazí na neskrývaný řádek tak přidá rozsah
		elseif b=true then 'řádek nemá hodnotu při které se skrývá
			with oRangeAddress 'řádky přidávaného rozsahu
				.StartRow=iZac
				.EndRow=iZac+iKon-1
			end with
			oRanges.AddRangeAddress(oRangeAddress,true) 'přidat rozsah
			iKon=0
			b=false
		else 'šlo o neskrývaný řádek takže začátek přidávaného rozsahu bude minimálně na dalším řádku
			iZac=iZac+1
		end if
	next i
	
		rem pro ukazatel průběhu
		if bCancel=true then 'stisknuto Cancel v ukazateli průběhu
			msgbox("Přerušeno")
			goto konec
		end if
	
	if iKon>0 then 'poslední řádky ještě mají být skryty
		with oRangeAddress 'řádky přidávaného rozsahu
			.StartRow=iZac
			.EndRow=iZac+iKon-1
		end with
		oRanges.AddRangeAddress(oRangeAddress,true) 'přidat rozsah		
	end if

	rem skrýt rozsahy přes UNO - rychlé - ale funguje jen v aktuálním listě
	dim document as object, dispatcher as object
	oDoc.CurrentController.ActiveSheet=oSheet 'požadovaný list jako aktivní aby v něm správně provedl uno příkaz
	oDoc.CurrentController.Select(oRanges) 'označit rozsahy
	document=oDoc.CurrentController.Frame
	dispatcher=createUnoService("com.sun.star.frame.DispatchHelper")
	dispatcher.executeDispatch(document, ".uno:DeleteRows", "", 0, array()) 'UNO pro smazání označených řádků
konec:
	oDlg.dispose() 'deaktivovat ukazatel průběhu
	exit sub
chyba:
	msgbox("Řádek: " & Erl & chr(13) & "Chyba č. " & Err & chr(13) & Error, 16, "NOVE_mazani")	
End Sub

Tak po dlouhé době přestalo toto makro fungovat v LO 4:24.8.1-0ubuntu0.22.04.1~lo1 a končí dvěma po sobě jdoucími hláškami.
2024-09-24_11-50.png
2024-09-24_11-50_1.png

Krom vývojové verze mám na Ubuntu i verzi SNAP 24.2.6.2 tam a vlastně i ve všech předchozích verzích 24.8. to funguje, nefunguje to jen v té úplně poslední verzi. Používám to denně asi 30x.

Si říkám je to jen chyba ve vývojové verzi nebo se něco zásadního změnilo na vždy?

#3 Re: Calc » Načtení dat z google disku » 26. 7. 2023 12:58:39

Defakto by jsi si udělal script který exportuje data z google tabulky, jak říkáš už i něco na netu lze najít. Dále makro které načte data do LO. Vše kulantně zabalíš do jednoho makra a vše se stane jedním klikem. Ale cesta by byla jednosměrná, z Google do LO.

#4 Re: Calc » Načtení dat z google disku » 26. 7. 2023 09:45:20

Tak to je ta horší varianta něco dostat z online google tabulky.
Neříkám že to nejde ale je to hodně složité. V principu by to šlo tak že třeba pomocí pythonu by jsi stáhl data příslušné buňky do počítače třeba v textové verzi a pak zase v LO si to načíst. Nejednalo by se o přímý spojení ale o ruční zavolání.

#5 Re: Calc » Načtení dat z google disku » 24. 7. 2023 13:31:35

Napadá mě jen nastavit si gdrive do počítače aby se připojoval jako disk a pak už je to hračka.

#6 Re: Calc » Jak vyexportovat PDF makrem bez ptaní (VYŘEŠENO) » 12. 7. 2023 16:09:56

Tak už to mám, musel jsem upravit i původní makro aby šlo poznat kdy se uspěšně uloží.

Sub Ulozit_jako_datumem()
    Dim oSheet
    Dim sVar, sVal As String
    Dim iCount, iLeft As Integer
    Dim Propval()
    Sheets = ThisComponent.getSheets()
    oSheet = ThisComponent.CurrentController.ActiveSheet
    sVar = ConvertFromUrl(ThisComponent.URL)
    sVal = oSheet.getCellRangeByName("W2").String
    sVal = sVal & "_" & Day(NOW) & "_" & Month(NOW) & "_" & Year(NOW) & ThisComponent.Title & ""
    sVar = FilPickFolder()

    If sVar <> "" Then
        FileURL = convertToURL(sVar & "/" & sVal)
        ThisComponent.StoreAsURL(FileURL, Propval())
        ulozitPDF sVar, sVal
    End If
End Sub

Function FilPickFolder() As String
    Dim oFolderPicker As Object
    Dim oAccept As Integer
    Dim oFolder As String
    Dim oFolderURL As String, oGetFolderName As String
    oFolderPicker = createUnoService("com.sun.star.ui.dialogs.FolderPicker")
    oFolderPicker.setTitle("Vyber složku kam uložit")
    oFolderPicker.setDisplayDirectory("file:///home/uživatel/") 'cesta k výchozímu linux adresáři
    oFolderPicker.setDescription("Vyber adresář")
    oAccept = oFolderPicker.execute()
    If oAccept = 1 Then
        oFolder = oFolderPicker.getDirectory()
        oFolderURL = oFolder(0)
        oGetFolderName = ConvertFromURL(oFolderURL)
        FilPickFolder = oGetFolderName
    Else
        oFolderPicker.cancel()
        FilPickFolder = ""
    End If
End Function

Sub ulozitPDF(ByVal sVar As String, ByVal sVal As String)
    Dim ZdrojovySoubor As String
    Dim CilovySoubor As String
    Dim args1(1) As New com.sun.star.beans.PropertyValue
    
    ' Získání názvu sešitu (souboru)
    Dim docName As String
    docName = ThisComponent.Title
    
    ' Odstranění původní přípony .ods
    docName = Replace(docName, ".ods", "")
    
    ' Získání cesty k zdrojovému sešitu
    Dim docURL As String
    docURL = ThisComponent.getURL()
    ZdrojovySoubor = ConvertFromURL(docURL)
    
    ' Vytvoření cesty pro cílový soubor s příponou PDF
    Dim directory As String
    directory = GetPath(ZdrojovySoubor)
    CilovySoubor = directory & docName & ".pdf"
    
    ' Převedení cesty na formát Linuxu
    Dim fileURL As String
    fileURL = ConvertToURL(CilovySoubor)
    
    ' Nastavení argumentů pro export do PDF
    args1(0).Name = "URL"
    args1(0).Value = fileURL
    args1(1).Name = "FilterName"
    args1(1).Value = "calc_pdf_Export"
    
    ' Vytvoření objektu Desktop pro volání exportní metody
    Dim desktop As Object
    desktop = createUnoService("com.sun.star.frame.Desktop")
    
    ' Export aktuálního sešitu do cílového PDF souboru
    desktop.getCurrentComponent().storeToURL(fileURL, args1())
End Sub

    ' Patch aby fungovalo umístění adresáře pod Linuxem
Function GetPath(ByVal sFilePath As String) As String
    Dim arrPath() As String
    arrPath = Split(sFilePath, "/")
    ReDim Preserve arrPath(UBound(arrPath) - 1)
    GetPath = Join(arrPath, "/") & "/"
End Function

#7 Re: Calc » Jak vyexportovat PDF makrem bez ptaní (VYŘEŠENO) » 12. 7. 2023 15:32:27

Nyní ovšem nastal nový problém po spojení s původním makrem kdy toto makro nepočká až se dokončí to první.
https://forum.openoffice.cz/viewtopic.php?id=6048

#8 Re: Calc » Jak vyexportovat PDF makrem bez ptaní (VYŘEŠENO) » 12. 7. 2023 15:30:43

Tak toto makro již funguje. Řešil jsem tam ještě problém spůvodní příponou .ods tak jsem jí odstranil big_smile

Sub ulozitPDF()
    Dim ZdrojovySoubor As String
    Dim CilovySoubor As String
    Dim args1(1) As New com.sun.star.beans.PropertyValue
    
    ' Získání názvu sešitu (souboru)
    Dim docName As String
    docName = ThisComponent.Title
    
    ' Odstranění původní přípony .ods
	docName = Replace(docName, ".ods", "")
    
    ' Získání cesty k zdrojovému sešitu
    Dim docURL As String
    docURL = ThisComponent.getURL()
    ZdrojovySoubor = ConvertFromURL(docURL)
    
    ' Vytvoření cesty pro cílový soubor s příponou PDF
    Dim directory As String
    directory = GetPath(ZdrojovySoubor)
    CilovySoubor = directory & docName & ".pdf"
    
    ' Převedení cesty na formát Linuxu
    Dim fileURL As String
    fileURL = ConvertToURL(CilovySoubor)
    
    ' Nastavení argumentů pro export do PDF
    args1(0).Name = "URL"
    args1(0).Value = fileURL
    args1(1).Name = "FilterName"
    args1(1).Value = "calc_pdf_Export"
    
    ' Vytvoření objektu Desktop pro volání exportní metody
    Dim desktop As Object
    desktop = createUnoService("com.sun.star.frame.Desktop")
    
    ' Export aktuálního sešitu do cílového PDF souboru
    desktop.getCurrentComponent().storeToURL(fileURL, args1())
End Sub

' Patch aby fungovalo umístění adresáře pod Linuxem
Function GetPath(ByVal sFilePath As String) As String
    Dim arrPath() As String
    arrPath = Split(sFilePath, "/")
    ReDim Preserve arrPath(UBound(arrPath) - 1)
    GetPath = Join(arrPath, "/") & "/"
End Function

#9 Calc » Jak vyexportovat PDF makrem bez ptaní (VYŘEŠENO) » 10. 7. 2023 13:25:20

barevnej
Odpovědí: 3

Snažím se udělat makro které by uložilo PDF na stejném místě jako je zdrojová tabulka pod stejným názvem jako je zdrojová tabulka.
Prakticky by to vypadlo stejně jako když kliknu na ikonku Přímý export do PDF a hned dal OK.

Už jsem dokázal aby si to načetlo místo souboru ale nedaří se mi aby si to ještě načetlo jméno souboru. Celkem mám pocit že to dělám hrozně složitě.

Sub ulozitPDF()
    Dim ZdrojovySoubor As String
    Dim CilovySoubor As String
    Dim args1(1) As New com.sun.star.beans.PropertyValue
    
    ' Získání cesty k zdrojovému sešitu
    Dim docURL As String
    docURL = ThisComponent.getURL()
    ZdrojovySoubor = ConvertFromURL(docURL)
    
    ' Vytvoření cesty pro cílový soubor s příponou PDF
    Dim directory As String
    directory = GetPath(ZdrojovySoubor)
    CilovySoubor = directory & "Vysledek.pdf" ' Tady potřebuji aby si načetl správný název zdroje
    
    ' Převedení cesty na formát Linuxu
    Dim fileURL As String
    fileURL = ConvertToURL(CilovySoubor)
    
    ' Nastavení argumentů pro export do PDF
    args1(0).Name = "URL"
    args1(0).Value = fileURL
    args1(1).Name = "FilterName"
    args1(1).Value = "calc_pdf_Export"
    
    ' Vytvoření objektu Desktop pro volání exportní metody
    Dim desktop As Object
    desktop = createUnoService("com.sun.star.frame.Desktop")
    
    ' Export aktuálního sešitu do cílového PDF souboru
    desktop.getCurrentComponent().storeToURL(fileURL, args1())
End Sub

' Patch aby fungovalo umístění adresáře pod Linuxem
Function GetPath(ByVal sFilePath As String) As String
    Dim arrPath() As String
    arrPath = Split(sFilePath, "/")
    ReDim Preserve arrPath(UBound(arrPath) - 1)
    GetPath = Join(arrPath, "/") & "/"
End Function

Prakticky chci navázat na toto makro aby se po úspěšném uložení automaticky vytvořilo PDF.
https://forum.openoffice.cz/viewtopic.php?id=6048

#10 Re: Calc » Ukládat pomocí makra (VYŘEŠENO) » 3. 7. 2023 15:03:05

Zdravím, rád bych doplnit toto makro o export do PDF po ukončení tohoto makra.
Dělám totiž vždy po tomto makru další krok a to že kliknu na inkonku "Přímý export do PDF" a nic neměním, cíl a název je jako zdroj. Prostě jen kliknu uložit.

Vytvořím nové vlákno.

#11 Re: Calc » Posun na poslední vyplněnou buǩu ve sloupci A (Vyřešeno) » 8. 6. 2023 14:28:50

Už tak jak jsi psal minule je to dokonalý, upravil jsem si pro vícero situací, rychlost je blesková bez ohledu množství dat i mezer. Fakt mi to moc pomohlo Děkuji.

#12 Re: Calc » Posun na poslední vyplněnou buǩu ve sloupci A (Vyřešeno) » 8. 6. 2023 09:14:25

Tak děkuji kluci, otestoval jsem všechno a nejlepší je ta prostřední cesta. Ono to mám spojené s dalším makrem které otevírá vložit nefomátovaný text Shift+Ctrl+Alt+V.
Super teď je že mohu data vkládat pod sebe s Vámi vytvořeným makrem kdy mám ukotvený první řádek s tlačítkem. Makro to vždy vloží pod stávající data. Stačí při vkládání klikat na tlačítko.

sub Vlozit_jako
rem ----------------------------------------------------------------------
rem define variables
dim document   as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

rem ----------------------------------------------------------------------
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "ToPoint"
args1(0).Value = "$A$2"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args1())
   Vlozit_jakoNEXT
End Sub

Sub Vlozit_jakoNEXT
	Dim oDoc As Object, oSheet As Object, oRange As Object, oCol As Object, oCell As Object, oLast As Object  
	oDoc	  = ThisComponent
	oSheet = oDoc.CurrentController.ActiveSheet	
	oCol = oSheet.Columns.getByIndex(oDoc.CurrentSelection.RangeAddress.StartColumn)	
	oLast = oCol.queryEmptyCells()
	oRange = oLast.getByIndex(oLast.getCount()-1)	
	oCell   = oCol.getCellByPosition(0, oRange.RangeAddress.StartRow)
	oDoc.CurrentController.select(oCell)
   Vlozit_jakoNEXT2
End Sub

sub Vlozit_jakoNEXT2
rem ----------------------------------------------------------------------
rem define variables
dim document   as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:PasteUnformatted", "", 0, Array())
end sub

Ještě bych měl dotaz který navazuje na to co dělám. Je technicky možné po vyvolání vložit nefomátovaný text Shift+Ctrl+Alt+V rovnou odkliknout ok? Mám tušení že to tak snadno nepůjde, zda jestli vůbec.

#13 Re: Calc » Posun na poslední vyplněnou buǩu ve sloupci A (Vyřešeno) » 7. 6. 2023 13:51:11

Jenže to jede před očima buňku po buňce... Což třeba u pár tisíc řádků je dosti zdlouhavé.

#14 Re: Calc » Posun na poslední vyplněnou buǩu ve sloupci A (Vyřešeno) » 7. 6. 2023 13:37:39

Tak upravil jsem trochu jinak big_smile

Sub Main
   Dim document As Object
   Dim dispatcher As Object
   Dim emptyCellCount as Integer
   Const MAX_EMPTY_CELLS = 2
   
   document = ThisComponent.CurrentController.Frame
   dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

   ' Na poslední vyplněnou ve sloupci
   Dim args1(1) As New com.sun.star.beans.PropertyValue
   args1(0).Name = "By"
   args1(0).Value = 1
   args1(1).Name = "Sel"
   args1(1).Value = False

   dispatcher.executeDispatch(document, ".uno:GoDownToEndOfData", "", 0, args1())

   ' O jednu dolů
   Dim args2(1) As New com.sun.star.beans.PropertyValue
   args2(0).Name = "By"
   args2(0).Value = 1
   args2(1).Name = "Sel"
   args2(1).Value = False

   Do While emptyCellCount < MAX_EMPTY_CELLS
       ' Kontrola, zda je buňka prázdná
       If Len(ThisComponent.CurrentSelection.getString()) = 0 Then
           emptyCellCount = emptyCellCount + 1
       Else
           emptyCellCount = 0
       End If
       
       ' Pokud jsou dvě prázdné buňky za sebou, skonči cyklus
       If emptyCellCount >= MAX_EMPTY_CELLS Then
           Exit Do
       End If

       ' Posun na další buňku
       dispatcher.executeDispatch(document, ".uno:GoDown", "", 0, args2())
   Loop
End Sub

Nicméně se zdá že to takto funguje

#15 Re: Calc » Posun na poslední vyplněnou buǩu ve sloupci A (Vyřešeno) » 7. 6. 2023 13:02:56

Je to téměř dokonalé, ještě kdyby to umělo přeskočit případnou mezeru které je vždy jen jedna mezi daty.

#16 Re: Calc » Posun na poslední vyplněnou buǩu ve sloupci A (Vyřešeno) » 7. 6. 2023 12:33:53

Tyto zkratky mi v Ubuntu nefungují. Ale i tak potřebuji to makrem abych si vytvořil tlačítko, z důvodu ovládání na dálku přes mobil kde nemám k dispozici klávesnici.

#17 Re: Calc » zautomatizování importu XML pomocí makra - VYŘEŠENO » 7. 6. 2023 12:31:50

Je to určitě zajímavá myšlenka, jenže se musí se stejně ručně zvolit jakou oblast dat načíst.

#18 Calc » Posun na poslední vyplněnou buǩu ve sloupci A (Vyřešeno) » 7. 6. 2023 11:26:00

barevnej
Odpovědí: 14

Snažím se vytvořit makro které by mě posunulo na konec dat alá Ctrl+End. Jenže potřebuji to jen v jednom sloupci a ne ve všem jako je u Ctrl+End. Ostatní sloupce jsou třeba delší atd...
Jinak data ve sloupci A může mít i mezery jako že je vyplněná 1 až 100 pak 101 je prádná řádek a pak od 102 zase pokračuje. Tj musí skočit až na poslední opravdu prázdný tak jako Ctrl+End.

Zkoušel jsem něco jako...

Sub SkocNaPosledniNeprazdnou()
    Dim sheet As Object
    Dim lastRow As Long
    sheet = ThisComponent.Sheets(0)
    lastRow = sheet.getCellRangeByName("A" & sheet.Rows.Count).EndOfUsedArea.Row
    sheet.setActiveCell(sheet.getCellByPosition(0, lastRow))
End Sub

Což nefunguje.
https://uloz.to/file/ICgwOf60cm43/test- … IEGGpjMt==

#19 Calc » Okno do makra ČEKEJTE » 3. 3. 2023 13:53:54

barevnej
Odpovědí: 1

Je možné jednoduše když máte makro které trvá zpracování 10-20 vteřin a končí MsgBox že je HOTOVO, aby těch 20 vteřin tam bylo okno že se na tom pracuje. Prostě aby člověk věděl že to stiskl správně a má počkat a na nic nesahat.

#20 Re: Calc » Kopírování a vkládání pomocí makra (VYŘEŠENO) » 1. 9. 2022 13:33:56

Je technicky možné kopírovat data z online google tabulky?

#21 Re: Calc » Kopírování a vkládání pomocí makra (VYŘEŠENO) » 27. 8. 2022 15:19:32

Tak jsem se když je víkend do toho ponořil a už to začínám "trošičku" chápat
_

sub Nahrat_z_jine_tabulky
rem ----------------------------------------------------------------------
rem define variables
dim document   as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

rem -------------Kam budu kopírovat, bez toho by to vložilo tam kde jsem----------------
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "ToPoint"
args1(0).Value = "$A$2"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args1())

rem --------------Do prvního políčka A2 vložím odkaz na první buňku v jiném zavřeném sešitu----------
dim args2(0) as new com.sun.star.beans.PropertyValue
args2(0).Name = "StringName"
args2(0).Value = "='file:///home/rrr-hlavni/Stažené/test2.ods'#$List1.E2"

dispatcher.executeDispatch(document, ".uno:EnterString", "", 0, args2())

rem ---------------Rozkopíruji vzorec na 10 řádků od A2 do A11 --------------------
dim args3(0) as new com.sun.star.beans.PropertyValue
args3(0).Name = "EndCell"
args3(0).Value = "$A$11"

dispatcher.executeDispatch(document, ".uno:AutoFill", "", 0, args3())


rem ---------Musím refrešnout odkazy jinak se bude stále načítat poslední známá hodnota--------
dispatcher.executeDispatch(document, ".uno:UpdateTableLinks", "", 0, Array())


rem ----------------Vše co jsem tam nakopíroval převedu vzorec na hodnotu----
dispatcher.executeDispatch(document, ".uno:ConvertFormulaToValue", "", 0, Array())

MsgBox "Aktualizováno"
end sub

_
Popsal jsem tam i za "rem" co proč dělám. Zvláště pak mi dalo zabrat najít jak pomocí UNO refrešnout odkazy jelikož ono to bere tak nějak z mězipaměti a pokud mu natvrdo nedám že to musí znova načíst tak to načte jak se mu zachce, tím předposledním příkazem jsem si to pojistil smile

#22 Re: Calc » Kopírování a vkládání pomocí makra (VYŘEŠENO) » 27. 8. 2022 13:28:04

Všiml jsem si že jste mě minule nechal ať na to přijdu sám a jsem vlastně za to rád smile
_
Tady se snažím pochopit podstatu věci, opravdu musím kopírovat celý list abych následně z něho mohl zkopírovat data následně list mazat? Myslím že i kdyby se tak stalo tak to nebude fungovat jelikož danný list se vzorci odkazuje na mraky jiných listů které už tam v tu chvíli nebudou.

#23 Re: Calc » Kopírování a vkládání pomocí makra (VYŘEŠENO) » 26. 8. 2022 11:58:01

Tak tady jsem se zasekl, nemohu přijít na to jak se odkázat na jiný sešit.
_

rem ----------------------------------------------------------------------
dim args2(2) as new com.sun.star.beans.PropertyValue
args2(0).Name = "URL"
args2(0).Value = "file:///home/rrr-hlavni/Stažené/test2.ods"
args2(1).Name = "oSheet"
args2(1).Value = "List1"
args2(2).Name = "ToPoint"
args2(2).Value = "$E$2:$E$11"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args2())

_
Toto samozřejmě nefunguje, stále kopíruji z aktuálního sešitu a ne z odkazovaného.

#24 Re: Calc » Kopírování a vkládání pomocí makra (VYŘEŠENO) » 26. 8. 2022 10:33:14

Teď se snažím kopírovat data z jiného sešitu, ovšem není to tak snadné jak jsem si myslel.

dim args2(0) as new com.sun.star.beans.PropertyValue
args2(0).Name = "ToPoint"
args2(0).Value = "'file:///home/rrr-hlavni/Stažené/test2.ods'#$List1.$E$2:$E$11"

#25 Re: Calc » Kopírování a vkládání pomocí makra (VYŘEŠENO) » 26. 8. 2022 09:40:36

Tak trochu jsem "studoval" a zdá se že to funguje. Ovšem to neznamená že to mám technicky správně.
_

sub COPY
rem ----------------------------------------------------------------------
rem define variables
dim document   as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

rem ----------------------------------------------------------------------
dim args2(0) as new com.sun.star.beans.PropertyValue
args2(0).Name = "ToPoint"
args2(0).Value = "$E$2:$E$11"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args2())

rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:Copy", "", 0, Array())

rem ----------------------------------------------------------------------
dim args4(0) as new com.sun.star.beans.PropertyValue
args4(0).Name = "ToPoint"
args4(0).Value = "$A$2"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args4())

rem ----------------------------------------------------------------------
dim args5(5) as new com.sun.star.beans.PropertyValue
args5(0).Name = "Flags"
args5(0).Value = "V"
args5(1).Name = "FormulaCommand"
args5(1).Value = 0
args5(2).Name = "SkipEmptyCells"
args5(2).Value = false
args5(3).Name = "Transpose"
args5(3).Value = false
args5(4).Name = "AsLink"
args5(4).Value = false
args5(5).Name = "MoveMode"
args5(5).Value = 4
dispatcher.executeDispatch(document, ".uno:InsertContents", "", 0, args5())


end sub

Zápatí

Používáme FluxBB