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

#1 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?

#2 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

#3 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.

#4 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.

#5 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"

#6 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

#7 Calc » Kopírování a vkládání pomocí makra (VYŘEŠENO) » 26. 8. 2022 08:36:59

barevnej
Odpovědí: 9

Zkouším přijít na jednu věc. Kopírovat nějaký výsledek a ten poté vložit jako hodnotu čisla.
COPY.gif
_
Zkoušel jsem zaznamenat makro což nefunguje.

sub Main
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 = "$E$2"

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

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 ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:Paste", "", 0, Array())


end sub

_
V praxi by to mělo sloužit ne jen kopírování hodnot ve stejném sešitě ale i napříč jinými sešity. Nechci linkovat na jiné sešity jelikož se pak otevírá i na jiných počítačích a data by se už nenačetla.

#8 Re: Calc » Export oblast do textového PHP (VYŘEŠENO) » 24. 8. 2022 14:30:14

Tak už jsem to vše poupravil a pochopil a vše funguje jak má, dokonce i to aby to šlo po řádkách a ne sloupcích. Moc děkuji.

Sub DejMatici
Dim oCell As Object 
oCell = ThisComponent.CurrentController.getSelection() 
With oCell.RangeAddress 
SH = .Sheet 
SC = 1 '	začátek řádku (počítá se od nuly)
SR = 2 '	začátek sloupce (počítá se od nuly)
EC = 5 '	počet řádků od prvního kodu (počítá se od jedničky)
ER = 5 '	počet sloupců od prvního kodu (počítá se od jedničky)
End With 
oSheet = ThisComponent.Sheets(SH)
Dim Vypis as string
Vypis = Vypis & "<?php" + Chr(10) + Chr(13) 
For i = SC To EC
For j = SR To ER
IF j = ER Then
Vypis = Vypis & oSheet.getCellByPosition(j, i).String + Chr(10)
Else
Vypis = Vypis & oSheet.getCellByPosition(j, i).String + Chr(9)
End If
Next j
Next i
Vypis = Vypis + Chr(13) & "?>"
Ulozit_PHP(Vypis)
End Sub

sub Ulozit_PHP(ByVal Vypis as string)
sVar = ConvertFromUrl(ThisComponent.URL)
iVar = Len(svar)
sTimer = Timer()
For i = iVar To 1 step -1
IF Mid(svar,i,1) = "/" or Mid(svar,i,1) = "\" then
sVal = left(sVar,i)
Exit For
end If
next i
MyUrl = ConvertToUrl(sVal & "stav.php")	
Dim arg(0) As New com.sun.star.beans.PropertyValue
arg(0).Name = "Hidden" 
arg(0).Value = True
oWName = ConvertToUrl(Nahrady)															
TestDoc = StarDesktop.loadComponentFromURL( "private:factory/swriter", "_blank", 0, arg())															
dim document   as object
dim dispatcher as object
document   = TestDoc.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
dim args1(1) as new com.sun.star.beans.PropertyValue
args1(0).Name = "URL"
args1(0).Value = MyUrl
args1(1).Name = "FilterName"
args1(1).Value = "Text"
dispatcher.executeDispatch(document, ".uno:SaveAs", "", 0, args1())
Dim oText As Object																	
  		oText = TestDoc.getText()															
		oText.insertString(oText.getStart(),Vypis, false)	
TestDoc.Store()
TestDoc.dispose	
MsgBox ("Exportován stav.php")
end sub

#9 Re: Calc » Export oblast do textového PHP (VYŘEŠENO) » 24. 8. 2022 14:04:05

Aha jsem blbej a nečtu smile
SC = 2
SR = 1
EC = 6
ER = 5

Jen je zvláštní jak jede jakoby ze shora dolů, jako by jste četl čínský text. Asi to nebude mít na výsledek vliv, jen je to opticky jakoby nepřehledné.

#10 Re: Calc » Export oblast do textového PHP (VYŘEŠENO) » 24. 8. 2022 13:28:16

Nyní to vygeneruje po spoštění makra "DejMatici" správně ve stejné složce i název "stav.php" který obsahuje

<?php



?>

Ovšem data uprostřed chybí, kde mám v tom makru navolit oblast například C2G6
_
ps: před poslední end sub jsem si dal MsgBox ("Exportován stav.php") smile

#11 Calc » Export oblast do textového PHP (VYŘEŠENO) » 24. 8. 2022 09:39:22

barevnej
Odpovědí: 4

Vaše rady tady jsou opravdu excelentní a v dnešní nelehké době mi moc pomáhají.
K věci. Generuji si část PHP pomocí tabulky a ten pak kopíruji a ukládám jako text do souboru "stav.php"
_
➊ Exportovala by se předem danná oblast dat, třeba viz příklad C2G6 (určoval bych v makru)
2022-08-24_11-00.png
_
➋ Před "<?php" a za "?>" výsledný export by se doplnil text který v tabulce není tak aby výsledek vypad takto.

<?php

$bezEU1 = '8,69';	$sEU1 = '10,51';	$daEU1 = '<!-- -->';	$dbEU1 = '';	$dcEU1 = '';
$bezEU2 = '9,78';	$sEU2 = '11,83';	$daEU2 = '<!-- -->';	$dbEU2 = '';	$dcEU2 = '';
$bezEU3 = '13,55';	$sEU3 = '16,40';	$daEU3 = '<!-- -->';	$dbEU3 = '';	$dcEU3 = '';
$bezEU4 = '16,32';	$sEU4 = '19,75';	$daEU4 = '<!--';	$dbEU4 = '-->';	$dcEU4 = '</select><!--';
$bezEU5 = '21,06';	$sEU5 = '25,48';	$daEU5 = '<!-- -->';	$dbEU5 = '';	$dcEU5 = '';

?>

_
➌ Uložilo by se ve stejné složce kde se nachází tabulka. Název by byl vždy stejný a to "stav.php", již se ve složce tento soubor bude nacházet takže jej export bude přepisovat.
_
_
Doteď to dělám ručně tak že otevřu textový editor a zkopíruji tabulku do něj ručně, toto by mi urychlilo práci.

#12 Re: Calc » Makro na opakování » 20. 7. 2022 10:52:56

Dokonalé, perfektní, nádhera. Děkuji.

#13 Re: Calc » Makro na opakování » 20. 7. 2022 09:00:41

Možná jen dotaz, jak zvolím jiný sloupec? Vím že se počítá od nuly ale nevím kterou tu nulu přepsat.

#15 Re: Calc » Makro na opakování » 18. 7. 2022 08:20:19

První sloupec má vždy popis takže začínám od druhého řádku. Zatím to dělám vzorcem v druhém sloupci na druhém řádku "B2"

=IF(ISBLANK(A2);B1;A2)

Akorát mi jde o to že teď ručně musím přidat sloupec "B" abych tam udělal onen vzorec. Právě bych rád to samé aby se aplikovalo v tom samém sloupci tj ve sloupci "A".
Jak říkám zatím si poradím ručně takto ovšem jelikož to dělám prakticky každý den tak mě napadlo si to ulehčit smile

#16 Calc » Makro na opakování » 17. 7. 2022 14:34:01

barevnej
Odpovědí: 8

Nevím jak to pojmenovat ale potřebuji v jednom sloupci rozkopírovat kody viz obrázek. Vzorcem bych to uměl ale datábáze má desítky tisíc řádků tak je to nepraktické, Makro by bylo ideální.
_
2022-07-17_15-23.png
_
A výsledek by měl být rozkopírovat kody dolů dokud nenarazí na jiný a tak pořád dokola dokud nenarazí na slovo KONEC a tam zastaví, jinak by to bylo nekonečné.
_
2022-07-17_15-23_1.png
_
ps: Makro použit na aktualním listu, ne podle jména jelikož má pokaždé jméno listu jiné.

#17 Re: Calc » SUM určitý počet řádků (VYŘEŠENO) » 13. 7. 2022 10:27:59

Aha takže ono číslo 99 by mělo být vždy větší než li je prohledávaná oblast.
_
Funguje to parádně, dohromady bych takový vzorec nedal ale tento už naplno využívám každý den.
_
Děkuji moc.

#18 Re: Calc » SUM určitý počet řádků (VYŘEŠENO) » 11. 7. 2022 07:46:04

@neutr
makro funguje na malém vzorku rychle ale jak jsem ho hodil do komplexního sešitu s více než 5500 řádků a hromadou jiných návazných výpočtů a propojení, se makro počítalo více jak 15min a pak už jsem nevydržel a zabil ho.
_
@LADER
teda než jsem to pochopil, ano ten trik že za vzorec dám mezeru a až pak Ctrl+Shift+Enter funguje. A zkopírování a roztažení dvou označených řádků již fungovalo. Na mé veliké tabulce ozázka 5 vteřin a je spočítáno smile
Jen dotaz, to 999 znamená že prozkoumává max 999 řádků pod vzorcem?
_
Zatím nechápu co to maticové vzorce přesně jsou ale vypadá to zajímavě. Zkusím si o tom něco přečíst.
_
Děkuji oboum za pomoc. wink

#19 Re: Calc » SUM určitý počet řádků (VYŘEŠENO) » 10. 7. 2022 16:14:22

Tak jsem si říkal super vypadá to funkčně. Jenže to vůbec nechápu neutral
Poprvé slyším o něčem jako jsou maticové funkce. To bude asi toto že
2022-07-10_17-06.png
_
Jenže ono to nejde kopírovat do jiného sešitu a když to zkopíruji je to bez těch spešl závorek, jsem si říkal že ty závorky napíšu ale tak to nefunguje.
_
Potom také ve vašem případě jsem nedocílil onoho "protažení" vzorce z buňky C3 dolů. Možná jsem to jen nepochopil.
_
Děkuji za pomoc.

#20 Calc » SUM určitý počet řádků (VYŘEŠENO) » 10. 7. 2022 12:29:23

barevnej
Odpovědí: 7

Mám sloupec "A" a v tom je náhodný text a jinak prázdné buňky.
Ve sloupci "B" jsou čísla.
Potřebuji pokud ve sloupci "A" je nějaký text tak sečíst všechny čísla dokud nenarazí zase na nějaký text.
_
Obrázek více než li tisíce slov smile
2022-07-10_13-43.png
_
Obarvené je to poze pro lepší pochopení. Nyní dokážu SUM do vzorce dopsat pouze ručně, jak ale udělat abych mohl vzorec protáhnout automaticky?
_
EDIT: přidal jsem na konec "KONEC" aby se poslední vzorec neprohledával automaticky do nekonečna.

#21 Re: Calc » Ukládat pomocí makra (VYŘEŠENO) » 6. 7. 2022 08:40:44

Tak veliké díky neutr wink
Vzhledem k tomu že výsledek je lepší než li jsem očekával tak jsem upravil i původní požadavky.
V principu to funguje takto. Máte soubor Tabulka.ods kde v buňce X3=Zákazník aktivního listu máte jméno zákazníka a po spuštění tohoto makra se soubor sám uloží kam si ho nasměrujete ve formátu Zákazník_6_7_2022_Tabulka.ods
Jistě se toto může hodit každému kdo často ukládá něco dle nějakého pravidla wink
_

REM  *****  BASIC  *****

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("X3").String
sVal = sVal & "_" & Day(NOW) & "_" & Month(NOW) & "_" & Year(NOW)& ThisComponent.Title & ""
sVar = FilPickFolder()
FileURL = convertToURL(sVar & "/" & sVal)
ThisComponent.StoreAsURL(FileURL, Propval())
End Sub

Function FilPickFolder()
	Dim oFolderPicker As Object
	Dim oAccept As Integer
	Dim oFolder()
	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živatelské_jméno/Plocha/") '<-toto je cesta v Linuxu kde chete aby se Vám průzkumník otevřel. Ve windows by cesta začínala takto bez file:/// -> D:/   Nebo tento řádek odstraňte a bude Vám nabízet výchozí adresář systému.
		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()
   		End If
End Function

#22 Re: Calc » Ukládat pomocí makra (VYŘEŠENO) » 4. 7. 2022 11:53:42

@LADER To bych bral jen pokud by to nešlo udělat makrem, jakože nouzovku. smile

#23 Re: Calc » Ukládat pomocí makra (VYŘEŠENO) » 4. 7. 2022 07:30:46

Dobrý den, máte pravdu že jsem to popsal zmatečně. Omlouvám se.
Je fakt že jsem si to u druhé odpovědi rozmyslel a proto ten zmatek.
Zkusím to popsat znova smile
_2022_SALE.ods je vzorový soubor do kterého vyplňuji objednávku, proto ho nepřepisuji ale ukládám jako nový soubor.
Po spuštění makra by bylo stejné jako bych klikl na "Uložit jako..." s tím že by se předvyplnil název souboru a já bych si jen zvolil kam si ho chci uložit.
2022-07-04_08-23.png
_
Nyní to dělám stejně jen s tím že si název souboru vyplňuju ručně.

#24 Re: Calc » Ukládat pomocí makra (VYŘEŠENO) » 3. 7. 2022 15:50:12

Po spuštění makra se titulek okna přejmenuje naprosto správně jak jsem chtěl.
Jenže soubor se neuloží...
_
Teď mě napadlo zda by nešlo aby po spuštění makra vyskočilo okno "Uložit jako.." s tím že by už byla předvyplněn onen název a já si jen klikl kam ho uložit. smile Toto by bylo dokonalé.
_
Jde o to když takovou opreci denně opakujete nespočetkrát tak proto hledám jak si práci usnadnit.
_
ps: oSheet = Sheets.getByName("Nabídka") tam může být přímo aktuální list? Tlačítko by bylo umístěno na něm.

#25 Calc » Ukládat pomocí makra (VYŘEŠENO) » 3. 7. 2022 11:55:06

barevnej
Odpovědí: 7

Krásný letní den přeji smile
_
Mám myšlenku a zkusím jí popsat.
Mám tabulku která se nějak jmenuje "_2022_SALE.ods" jméno je pokaždé jiné.
Pak v tabulce mám vždy na místě X3 jméno zákazníka.
_
Dám "uložit jako.." vždy do stejné složky "tady by mi stačilo vědět kam napsat cestu v onom makru"
Výsledný název souboru je obsah X3 + datum (bez roku pač ten už je obsažen v názvu) + zbytek původního názvu.
Příklad: X3=Zákazník  Jméno původního souboru _2022_SALE.ods
Výsledný uložený soubor Zákazník_3_7_2022_SALE.ods
ps. datum neumsí striktně být bez úvodních nul, tj jestli to bude Zákazník_03_07_2022_SALE.ods nevadí, i když původní varianta je "hezčí"
Soubor hned prosím nezavírat, ještě s ním dále pracuji.

Zápatí

Používáme FluxBB