Ano existuje. Princip je v tom, že buď kopírujete jen obsah, nebo také některé, či všechny parametry formátů.
Když kopírujete ručně tak máte volbu Ctrl+C a vložit Ctrl+V. Pak se vám vykopíruje vše. Když ale dáte vlořit jinak můžete zvolit vzorce, formáty jako datum a další věci.
Podobně to jde makrem. Existuje kopírování schránkou (Basic) které odpovídá tomu Ctrl+C - vloží vše. Podobně je tomu při použití UNO. Když to uděláte záznamníkem maker tak máte také volbu stejnou jako při ručním kopírování.
Jiný typ kopírování pomocí makra Basic je jen obsahem array. Také se dá nastavit co vše kopírujete, ale nejčastěji jen hodnoty a text (žádné vzorce ani formáty).
Takže jednou cestou je nahrát si makro záznamníkem tak jak potřebujete a spouštět ho jako součást jiného kódu. Je to snadná cesta, ale má nevýhodu. Když kopírujete makro skáče z úseku na úsek. Pokud například kopírujete něco z listu 1 do listu 2, nebo daleko od sebe tak to skáče jako koza. Navíc při tomto makru nesmíte nic jiného dělat - zejména ne kopírovat schránkou. Vím to velice dobře a přes to vždy chybu opakuju. Při chodu makra (časově náročné procesy) prohlížím web. Někdy si vykopíruji odkaz a vložím do příkazové řádky browseru - a tam vyskáčou blbosti. Problém je, že to platí i opačně. Calc (Writer) vyhodnotí místo dat kopírovanou URL.
Tohle ale makrům napsaným v Basic (pokud nejde o schránku) nevadí a mohu dělat co chci mimo balík LO, AOO (jde ale bez problému prohlížet například nápovědu, ale ne editovat).
Takže jiná cesta je napsat kopírování v Basic(u) bez schránky (nebo upravit makro při volání "select" - aby neskákalo) a formáty tam potom doprogramovat, což stejně požadujete. Jde jen například o to, zda chcete kopírovat vzorce, ale to jde také basicem jako "Cell.Formula". K tomu zadáte formátovací kód.
V některých případech by se vyplatilo nastavit podmíněný formát kopírovaných úseků. Jde samozřejmě o to co děláte a co potřebujete.
Posílám ukázkové kódy pro Basic otestujte si je :
Sub CopySchrankou
Doc = thisComponent
zkopiruj = doc.Sheets(0).getCellRangeByName("A1:C1")
doc.CurrentController.select(zkopiruj)
obsah = doc.CurrentController.getTransferable()
vloz = doc.Sheets(0).getCellRangeByName("A2:C20")
doc.CurrentController.select(vloz)
doc.CurrentController.insertTransferable(obsah)
End Sub
Sub Kopirovat1
Sheets = ThisComponent.getSheets()
'oSheet = Sheets.getByIndex(0)
oSheet = Sheets.getByName("List1")
osource_range=osheet.getCellRangeByPosition(2, 3, 4, 9)'source
osource_array=osource_range.getDataArray()
otarget_range=oSheet.getCellRangeByPosition(5, 0, 7, 6)'target
otarget_range.setDataArray(osource_array)
End Sub
Sub Kopirovat2
Sheets = ThisComponent.Sheets
oSheet = Sheets.getByIndex(0)
'oSheet = Sheets.getByName("List1")
oCellrange = oSheet.getCellRangeByPosition(0,0,2,3)
SourceAddress = oCellrange.RangeAddress
TargetCell = oSheet.getCellRangeByName("E1")
TargetAddress = TargetCell.CellAddress
oSheet.copyRange(TargetAddress, SourceAddress)
End Sub
Samozřejmě existují varianty pro "CellRangeByNeme", nebo "CellRangeByPosition" stejně jako pro čísla, nebo názvy sešitů. Formáty se nesou většinou jen po jednotlivých buňkách (Cell), ale mohou i po úsecích (Range). Tam to snad dobře popisuje Dan Sedláček. Já používám trochu něco jiného.
Editoval neutr (20. 4. 2015 06:59:41)
Moje e-mailová adresa
Pokud je Váš problém vyřešen, označte prosím svůj příspěvek za "VYŘEŠENÝ"
Zlepšíte orientaci při vyhledávání řešení JAK OZNAČIT TÉMA ZA VYŘEŠENÉ