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

#1 20. 4. 2018 04:50:50

Vito
Člen
Registrace: 20. 4. 2018
Příspěvků: 7

Kopirovani radku na dalsi list podle obsahu bunky - VYŘEŠENO

Dobry den
Potreboval by jsem poradit jak kopirovat radek podle obsahu bunky a vlozit do dalsiho sesitu

Editoval Vito (23. 4. 2018 19:41:32)

Offline

#2 20. 4. 2018 06:59:36

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

Re: Kopirovani radku na dalsi list podle obsahu bunky - VYŘEŠENO

v dalším sešitu funkce =IF(odkaz na originální sešit a buňku a podmínka; odkaz na originální sešit a buňku,"")


LibreOffice 5.2.2.2

Offline

#3 20. 4. 2018 10:14:39

Vito
Člen
Registrace: 20. 4. 2018
Příspěvků: 7

Re: Kopirovani radku na dalsi list podle obsahu bunky - VYŘEŠENO

Dekuju za odpoved ale to asi neni ono ja mam program z ktery uklada hodnoty v tabulce jmeno a deset hodnot v radku ted tam mam asi 80 jmen ktere potrebuju rozdelit do 5 skupin tak jsem si tu nasel makro ktere zkopiruje oblast tedy radek a ulozi ho do dasiho sesitu coz fungovalo dobre nez jsem pridal dalsi jmena a vsechno se mi posunulo o nove jmeno dolu nebo nahoru tak jsem myslel jestli neni neco podobneho jenom s tim ze nebudu psat oblast A1,A10 ale jenom jmeno v bunce podle ktere se mi zkopiruje celi radek

Offline

#4 20. 4. 2018 10:41:06

neutr
Člen
Registrace: 8. 3. 2007
Příspěvků: 2,697

Re: Kopirovani radku na dalsi list podle obsahu bunky - VYŘEŠENO

Tohle musíte lépe popsat.


     To co uvádíte zcela jistě není triviální problém. Předpokládáte přidávání jmen (zřejmě také odebírání), 10 položek na řádek (které jsou/nejsou vyhodnocovány?) a dále že "lidi" sortujete do 5-ti kategorií.
     Tohle vypadá na práci kterou umí řešit kontingenční tabulka. K té zřejmě musíte přidat parametr podle kterého se vyhodnocuje jednotlivá skupina - pokud tam ten parametr již není obsažen. Kontingenční tabulka umí také filtrovaná data kopnout na předem určené místo - do jiného listu ap.


     Jste podle všeho nový uživatel - podle data registrace - dnes, ale můžete být znalý jako častý anonymní quest. Jde o to že uvádíte řešení makrem. To znamená, že jste nejméně zdatným a dost možná nadprůměrně zkušeným uživatelem - možná dík jinému tabulkovému procesoru, ale na tom nezáleží.
     Pokud umíte pracovat s makry (byť okopírovanými a určenými původně k jiným účelům), tak se dá předpokládat že o možnosti řešení pomocí kontingenční tabulky víte a ta Vám, nevyhovuje.


     Pokud můžete - postněte sem (např. pomocí uložto.cz ap.) vzor s důkladným popisem potřeb. Ale pozor - žádná ostrá data !!! Udělejte vzor který popisuje problematiku manipulací ale nikliv tak aby se dalo dovodit co, kde, jak, nebo proč děláte.

Editoval neutr (20. 4. 2018 10:43:26)


Pokud je Váš problém vyřešen, označte prosím svůj příspěvek za "VYŘEŠENÝ"
Zlepšíte tak orientaci na fóru při vyhledávání řešení problémů
JAK OZNAČIT TÉMA ZA VYŘEŠENÉ

Offline

#5 20. 4. 2018 11:29:22

Vito
Člen
Registrace: 20. 4. 2018
Příspěvků: 7

Re: Kopirovani radku na dalsi list podle obsahu bunky - VYŘEŠENO

Ted pouzivam v makru
Oblast = list.getCellRangeByName("A1:J1"). RangeAdress
Cil = list2.getCellRangeByName("A1"). CellAddress
List.copyRange(cil, oblast)
Oblast = list.getCellRangeByName("A4:J4"). RangeAdress
Cil = list2.getCellRangeByName("A2"). CellAddress
List.copyRange(cil, oblast)


Neni neco cim by jsem zmnenil na LIST.GETCELLRANGEBYNAME ("karel:+9")

Offline

#6 20. 4. 2018 11:31:52

Vito
Člen
Registrace: 20. 4. 2018
Příspěvků: 7

Re: Kopirovani radku na dalsi list podle obsahu bunky - VYŘEŠENO

Neco Jako list.getCellRangeByValue

Offline

#7 20. 4. 2018 11:41:33

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

Re: Kopirovani radku na dalsi list podle obsahu bunky - VYŘEŠENO

Drobná nesrovnalost: Kopírujete do dalšího listu a nikoli do dalšího sešitu. To je pro tvorbu makra docela zásadní, rozlišujte to prosím.


LibreOffice 5.2.2.2

Offline

#8 20. 4. 2018 11:44:10

Vito
Člen
Registrace: 20. 4. 2018
Příspěvků: 7

Re: Kopirovani radku na dalsi list podle obsahu bunky - VYŘEŠENO

Priste si dam pozor

Offline

#9 20. 4. 2018 12:17:30

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

Re: Kopirovani radku na dalsi list podle obsahu bunky - VYŘEŠENO

zkuste něco jako
If list.getCellRangeByName("A1").String = "Karel" Then
List.copyRange(cil, oblast)
End if
Ale musím říct, že tento způsob kopírování neznám ...

EDIT: ok, takže kopírování takto skutečně funguje, je to ale styl 1:1 - tzn. kopíruje se úplně vše bez možnosti jakýchkoli omezení což se málokdy hodí (většinou nechci kopírovat vzorce ale jen hodnoty tedy výsledky vzroců). Různé druhy kopírování dat jsou hezky uvedeny zde: https://www.openoffice.cz/doplnky/kopirovani-dat ovšem metoda CopyRange tam uvedena není, což je s podivem.

Editoval ludviktrnka (21. 4. 2018 13:29:08)


LibreOffice 5.2.2.2

Offline

#10 20. 4. 2018 12:19:25

Vito
Člen
Registrace: 20. 4. 2018
Příspěvků: 7

Re: Kopirovani radku na dalsi list podle obsahu bunky - VYŘEŠENO

Diky zkusim

Offline

#11 20. 4. 2018 14:23:07

neutr
Člen
Registrace: 8. 3. 2007
Příspěvků: 2,697

Re: Kopirovani radku na dalsi list podle obsahu bunky - VYŘEŠENO

Sub Deklarace1
Dim oSheet
Sheets = ThisComponent.getSheets()
oSheet = Sheets.getByName("List1")
'oSheet = thisComponent.Sheets(0)
'buňky zadávané indexy (positions)
----------------------------------------------------------------------
oSheet.getCellByPosition(48,1).Value = 4 'přiřazení hodnoty k buňce
'n = oSheet.getCellByPosition(48,1).Value 
'    přiřazení hodnoty k proměnné "n" která by měla být deklarována - ale funguje to i bez.
----------------------------------------------------------------------
'buňky zadávané jmény (pouze zápis do buněk)
oSheet.getCellRangeByName("A1").String = "Input Data"
oSheet.getCellRangeByName("A2").Value = 4
oSheet.getCellRangeByName("A3").Value = 5
oSheet.getCellRangeByName("A4").Formula = "=A2*A3"
End Sub

     Horní způsob je vhodný pro jednorázové vložení, nebo načtení hodnoty do nebo z buňky. Stačí deklarace listu. Pak už se popsaným způsobem zapisuje, nebo čte buňka.

SUB Deklarace2
 Dim Doc As Object
 Dim Sheet As Object
 Dim Cell As Object
 Doc = ThisComponent
 Sheet = Doc. Sheets ( 0 )
 Cell = Sheet. getCellByPosition ( 0 , 0 )
 Cell. Value = 100
 Cell = Sheet. getCellByPosition ( 0 , 1 )
 Cell. String = 1000
 Cell = Sheet. getCellByPosition ( 0 , 2 )
 Cell. Formula = "=A1+A2"
 MsgBox Cell. Value 
End SUB

     Tento systém zápisu je vhodný pro jiné účely. Mimo deklarací listu se deklarují buňky jako adresy souřadnic (možné též jménem ale je to méně praktické). Buňky se označí jakkoliv to běžné "Cell", nebo "oCell" lze zadat jako proměnnou - je to proměnná typu object, ale není nutná deklarace. To je ale také dané účelem.
     Výhodou je že pak už pracujeme jenom s krátkým výrazem. Doporučuji spíše začátečníkům deklarovat proměnnou buňky stejně tak jak je adresována v sešitě. Tedy například :
Dim A1 as object
A1 = Sheet.getCellRangeByName("A1"), nebo
A1 = Sheet.getCellByPosition (0,0)

Potom totiž zapíšeme proměnnou napříjklad takto :
A1.String = "Zápis", za chvíli to změníme
A1.Value = 12^2
A1.Formula = "=Sqrt(16)/2" 'Vzorec který se objeví v buňce
     Takže můžeme vložit makrem jak vzorec, tak přímo vypočtenou hodnotu konkrétně
A1.Value = sqr(16)/2 ' v buňce bude jen výsledek.


     Zápisy souřadnicemi se hodí do cyklů. Takže nyní si uděláme obecnou buňku
dim bunka as object
For i = 1 To 100
For j = 1 To 100
   bunka = Sheet.getCellByPosition(i,j)
   'úsek 100 x 100 se začátkem v buňce B2
   bunka.Value = i * j
Next j
Next i

Tak nevím jestli Vám to pomůže je toho dost co by se k tomuto dalo ještě napsat - ale pro praxi, nebo rozhodnutí jak deklarovat to většinou stačí.


Pokud je Váš problém vyřešen, označte prosím svůj příspěvek za "VYŘEŠENÝ"
Zlepšíte tak orientaci na fóru při vyhledávání řešení problémů
JAK OZNAČIT TÉMA ZA VYŘEŠENÉ

Offline

#12 22. 4. 2018 20:11:11

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

Re: Kopirovani radku na dalsi list podle obsahu bunky - VYŘEŠENO

Co třeba takto. Osobně preferuji kopírování přes DataArray - kopírují se pouze hodnoty, ale snadno si to překopete na svůj způsob v případě potřeby.

Sub copyRow
  
  doc = ThisComponent
  list1 = doc.Sheets.GetByName("List1")
  list2 = doc.Sheets.GetByName("List2")
  
  j = 0
  
  for i = 0 to 100
    if list1.getCellByPosition(0, i).String = "Karel" Then
      kopie = list1.getCellRangeByPosition(0, i, 3, i).getDataArray
      list2.getCellRangeByPosition(0, j, 3, j).setDataArray(kopie)

      j = j + 1

    end if
  next i  
  
  print "Hotovo"  
    
end sub

LibreOffice 5.2.2.2

Offline

#13 23. 4. 2018 19:38:59

Vito
Člen
Registrace: 20. 4. 2018
Příspěvků: 7

Re: Kopirovani radku na dalsi list podle obsahu bunky - VYŘEŠENO

dekuji ludviktrnka to je presne ono

Offline

Zápatí