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

#26 5. 10. 2010 07:00:42

dech
Člen
Registrace: 1. 10. 2008
Příspěvků: 150

Re: Prosim, pomozte s Makrem/Funkci

funguje! diky


LO 6.1.2.1. (x64)  WIn 8 64bit  16GB RAM

Offline

#27 10. 10. 2010 14:11:18

dech
Člen
Registrace: 1. 10. 2008
Příspěvků: 150

Re: Prosim, pomozte s Makrem/Funkci

Ahojte, mám zas problém :-((
Jednoduše potřebuju makrem zkopírovat A1:Z1 do A10:Z10  -všechna data(čísla,text,formáty,vzorce) - aby byl výsledek stejný jako když označím myší tento řádek(oblast) a vložím do 10. řádku
Kopírování vzorců aby bylo taky normální: jestliže bude v Z1 vzorec = A1+B1, tak aby v Z10 bylo A10+B10.
Ovšem, nelze k tomu použít to "UNO" rozhraní - jelikož tato operace probíhá ve skrytém listě a nahrát tuto operaci pouze rekordérem je kvůli tomuto destrukční.
Takže zkouším něco takového:

sub main
list = ThisComponent.getSheets().getByIndex(0)
zdroj = list.getCellRangeByName( "A1:Z1" )
list.getCellByPosition(0,9).setString(zdroj) 
end sub

no ale nefunguje to a hlasi to furt chyby,tak kdybyste někdo věděl...diky

Editoval dech (10. 10. 2010 14:12:19)


LO 6.1.2.1. (x64)  WIn 8 64bit  16GB RAM

Offline

#28 11. 10. 2010 05:40:35

j-pastierik
Člen
Registrace: 15. 11. 2004
Příspěvků: 761

Re: Prosim, pomozte s Makrem/Funkci

setString je pre jednu bunku, vo vnútri musí byť reťazec, vy tam máte objekt - zoznam buniek. Chce to cyklus.

Offline

#29 11. 10. 2010 07:09:11

dech
Člen
Registrace: 1. 10. 2008
Příspěvků: 150

Re: Prosim, pomozte s Makrem/Funkci

eh,no,tak asi vím co mám špatně-buď jen to "setString" nebo celé to "getCellByPosition(0,9).setString(zdroj)" , ale jak to má být správně,nevím. Už jsem prozkoumal celý širý internet, ale většinou ty makra byly s "UNO" nebo nějaká šílenost.


LO 6.1.2.1. (x64)  WIn 8 64bit  16GB RAM

Offline

#30 11. 10. 2010 09:37:36

j-pastierik
Člen
Registrace: 15. 11. 2004
Příspěvků: 761

Re: Prosim, pomozte s Makrem/Funkci

Ak chcete kopírovať vzorce a ešte ich upravovať, je to dosť šialené, pretože by ste tie vzorce museli analyzovať a sami by ste museli upravovať čísla riadkov.  Najlepšie riešenie je makro kopírovania cez ctrl+c/ctrl+v - je to síce cez uno, ale práve vďaka tomu sa nemusíte starať o úpravu vzorcov a takéto makro sa dá jednoducho získať nahratím a prípadnou úpravou. Nerozumiem, čo je na nahrávaní deštrukčné? Nahráte makro a list znovu skryjete, ak ho nechcete odkrývať vôbec, tak nahráte makro v inom zošite:

sub kopiruj
 dim document   as object : document   = ThisComponent.CurrentController.Frame
 dim dispatcher as object : dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
 dim args1(0) as new com.sun.star.beans.PropertyValue
 args1(0).Name = "ToPoint"
 args1(0).Value = "$A$1:$Z$1"
 dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args1())
 dispatcher.executeDispatch(document, ".uno:Copy", "", 0, Array()) 
 args1(0).Name = "ToPoint"
 args1(0).Value = "$A$10"
 dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args1())
 dispatcher.executeDispatch(document, ".uno:Paste", "", 0, Array())
end sub

Editoval j-pastierik (11. 10. 2010 09:39:40)

Offline

#31 11. 10. 2010 09:43:08

j-pastierik
Člen
Registrace: 15. 11. 2004
Příspěvků: 761

Re: Prosim, pomozte s Makrem/Funkci

Pravdaže, makro ešte treba doplniť o prepínanie na príslušný list zošitu.

Offline

#32 11. 10. 2010 20:38:38

dech
Člen
Registrace: 1. 10. 2008
Příspěvků: 150

Re: Prosim, pomozte s Makrem/Funkci

právě-potřebuju aby se to makro provedlo ve skrytém listě(je to taková databázička) a když nechám provést toto makro ve skrytém listě tak kurzor na právě aktivním listě se tak trochu zblázní a "uteče" až na 65536. řádek.
takže buď zbývá vylepšit toto makro tak aby fungovalo jen v daném skrytém listě...

sub copy_A1_Z1_paste_end_of_data
dim document   as object : document   = ThisComponent.CurrentController.Frame
dim dispatcher as object : dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "ToPoint"
args1(0).Value = "sheet1.$A$1:$Z$1"
dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args1())
dispatcher.executeDispatch(document, ".uno:Copy", "", 0, Array()) 
dispatcher.executeDispatch(document, ".uno:GoToEndOfData", "", 0, args1())
dispatcher.executeDispatch(document, ".uno:GoDown", "", 0, args1())
dispatcher.executeDispatch(document, ".uno:GoToStartOfRow", "", 0, args1())
dispatcher.executeDispatch(document, ".uno:Paste", "", 0, Array())
end sub

nebo to makro předtím,jak jsem vložil, tak to naučit najít konec dat(a popřípadě naučit jak vložit zkopírovaná data,ale to už není nezbytně nutné-znám způsob který je ale namáhavý-musí se udělat příkaz pro každou zopírovanou a vklaádano bunku)

tak kdyby někdo věděl pánové,tak diky!


LO 6.1.2.1. (x64)  WIn 8 64bit  16GB RAM

Offline

#33 11. 10. 2010 21:39:43

dech
Člen
Registrace: 1. 10. 2008
Příspěvků: 150

Re: Prosim, pomozte s Makrem/Funkci

JO!
Našel jsem tohle makro, které pracuje ve skrytém listě a kopíruje oblast do daného cíle(žádné UNO)

sub main4
Dim Doc As Object
Dim Sheet As Object
Dim CellRangeAddress As New com.sun.star.table.CellRangeAddress
Dim CellAddress As New com.sun.star.table.CellAddress

Doc = ThisComponent
Sheet = Doc.Sheets(0)

CellRangeAddress.Sheet = 0
CellRangeAddress.StartColumn = 0
CellRangeAddress.StartRow = 0
CellRangeAddress.EndColumn = 10
CellRangeAddress.EndRow = 0

CellAddress.Sheet = 0
CellAddress.Column = 0
CellAddress.Row = 25

Sheet.copyRange(CellAddress, CellRangeAddress)
end sub

JEDINOU věcí kerá mi zbývá dořešit je jak naučit makro najít konec dat(bez UNO)-abych tuto proměnlivou(:-D proměnnou samozřejmě) mohl nastavit do "CellAddress. ..."

Editoval dech (13. 10. 2010 10:47:15)


LO 6.1.2.1. (x64)  WIn 8 64bit  16GB RAM

Offline

#34 17. 10. 2010 23:48:08

dech
Člen
Registrace: 1. 10. 2008
Příspěvků: 150

Re: Prosim, pomozte s Makrem/Funkci

tak jsem na to přišel(jak zjistit číslo posl. řádku:
I have found the way how to obtain number of last row filled by data:

Sub number_of_last_row_in_column_A

sheet = ThisComponent.getSheets().getByName("sheet1")
range = sheet.getCellRangeByPosition(0, 0, 0, 65535)
empties = range.queryEmptyCells
full = sheet.getCellRangeByPosition(0, 0, 0, empties.RangeAddresses(0).startRow + 1)
lastrow = full.RangeAddress.EndRow

sheet.getCellByPosition(1,0).setValue(lastrow)  'puts the result in B1 cell
End Sub

LO 6.1.2.1. (x64)  WIn 8 64bit  16GB RAM

Offline

Zápatí