Já jsem to zkoušel jestli to není nějaká chyba LO, AOO - a nic. Po vložení makrem, nebo i ručně se naformátují jen kopírované buňky a pod nimi nic - žádné přeformátování.
Popiště v jaké verzi LO, nebo AOO se tak děje. Já mám poslední verze a u nich se to neděje. Já jsem se s tím ale ještě nesetkal v podobě kterou popisujete. Vím že to zůstane po smazání obsahu a zachování formátů.
Makro pro smazání je nejlepší nahrané. Vezměte "zdravý úsek" - stačí 1 buňka do makra. Makro pak spusťte ve správném rozsahu (rozsah je tam dán textem př : A1:G10). Rozsah zadejte makru jako parametr "string" a vložte.
Parametry můžete nahrát i samostatně. Jen s tím že kopírovaný úsek obsahuje specificky například rámečky, písmo, pozadí a podobně. Ale implicitní formát je bez čehokoliv. Jen byste mohl jednotlivě při vykopírování zaškrtnot v dialogu všechny položky samostatně (nikoliv vše). To je pro to abyste viděl jak ručně upravovat formáty. Implicitní formáty jsou formátovány často na "-1".
Nicméně mohu Vám poslat makra pro formáty v Basicu, ale k popisované chybě to není adekvátní postup. Jednak se takto neodstraňuje podstata, ale následky a navíc je to dost pracné. Takže makra spíš pro ostatní účely formátování - respektive přímo k programování a ne k opravě.
Ještě uvedu, že je možné kopírovat například schránkou a přenášet vše, nebo jen určité vlastnosti a určitý obsah s formátem a jiný bez formátu. Já osobně když chci formáty, tak to dělám nadvakrát. Jednou chránkou "vše" a podruhé jen obsahy (plain text) tím se ztratí například klikačky ale nedotčené formáty zůstanou.
Takže na Vás je oč Vám jde víc - o nápravu chyby, nebo o vzory pro programování? Chybu bych chtěl vidět jako vzor a možná i makro které jste použil.
Příklad makra pro formát Borderů :
Sub Border_Line(ByVal SC as long, ByVal SR as long, ByVal EC as long, ByVal ER as long, ByVal lin as integer, Optional x as integer)
Dim oDoc As Object
Dim oCtrl as Object
Dim oSelRange as Object, oCellRange as Object
Dim oBorder1 as Object, oBorder2 as Object, oBorder3 as Object, oBorder4 as Object
oDoc = ThisComponent
oCtrl = oDoc.getCurrentController()
oSelRange = oCtrl.getActiveSheet().getCellRangeByPosition(SC,SR,EC,ER)
oCtrl.select( oSelRange )
'-----------------------------------------
oCellRange = oDoc.CurrentSelection(0)
'-----------------------------------------
oBorder1 = CreateUnoStruct("com.sun.star.table.BorderLine2")
oBorder1.Color = iColor
oBorder1.LineWidth = lin
oBorder1.LineStyle = 1
'-----------------------------------------
oBorder2 = CreateUnoStruct("com.sun.star.table.BorderLine2")
oBorder2.Color = iColor
oBorder2.LineWidth = lin
oBorder2.LineStyle = 1
'-----------------------------------------
oBorder3 = CreateUnoStruct("com.sun.star.table.BorderLine2")
oBorder3.Color = iColor
oBorder3.LineWidth = lin
oBorder3.LineStyle = 1
'-----------------------------------------
oBorder4 = CreateUnoStruct("com.sun.star.table.BorderLine2")
oBorder4.Color = iColor
oBorder4.LineWidth = lin
oBorder4.LineStyle = 1
'-----------------------------------------
Select Case x
Case = 1
oCellRange.BottomBorder = oBorder1
Case = 2
oCellRange.TopBorder = oBorder2
Case = 3
oCellRange.LeftBorder = oBorder3
Case = 4
oCellRange.RightBorder = oBorder4
Case = 5
oCellRange.BottomBorder = oBorder1
oCellRange.TopBorder = oBorder2
Case = 6
oCellRange.BottomBorder = oBorder1
oCellRange.LeftBorder = oBorder3
Case = 7
oCellRange.BottomBorder = oBorder1
oCellRange.RightBorder = oBorder4
Case = 8
oCellRange.TopBorder = oBorder2
oCellRange.LeftBorder = oBorder3
Case = 9
oCellRange.TopBorder = oBorder2
oCellRange.RightBorder = oBorder4
Case = 10
oCellRange.LeftBorder = oBorder3
oCellRange.RightBorder = oBorder4
Case = 11
oCellRange.BottomBorder = oBorder1
oCellRange.TopBorder = oBorder2
oCellRange.LeftBorder = oBorder3
Case = 12
oCellRange.BottomBorder = oBorder1
oCellRange.TopBorder = oBorder2
oCellRange.RightBorder = oBorder4
Case = 13
oCellRange.BottomBorder = oBorder1
oCellRange.LeftBorder = oBorder3
oCellRange.RightBorder = oBorder4
Case = 14
oCellRange.TopBorder = oBorder2
oCellRange.LeftBorder = oBorder3
oCellRange.RightBorder = oBorder4
Case Else
oCellRange.BottomBorder = oBorder1
oCellRange.TopBorder = oBorder2
oCellRange.LeftBorder = oBorder3
oCellRange.RightBorder = oBorder4
Exit Sub
End Select
'-----------------------------------------
oSelRange = oCtrl.getActiveSheet().getCellRangeByPosition(SC,ER,EC,ER)
oCtrl.select( oSelRange )
End Sub
Podobné jednodoché řešení pro Vaši orientaci :
Sub Cell_Array_Border
Dim BasicBorder as New com.sun.star.table.BorderLine
Dim oBorder As Object
oBorder = ThisComponent.Sheets.getByName( "List1" ).getCellRangeByPosition(1,1,2,2).TableBorder
BasicBorder.Color = RGB(255, 0, 0)
BasicBorder.InnerLineWidth = 0
BasicBorder.OuterLineWidth = 2
BasicBorder.LineDistance = 0
oBorder.LeftLine = BasicBorder
oBorder.TopLine = BasicBorder
oBorder.RightLine = BasicBorder
oBorder.BottomLine = BasicBorder
ThisComponent.Sheets.getByName( "List1" ).getCellRangeByPosition(1,1,2,2).TableBorder = oBorder
End Sub
PS - například iColor nahraďte číslem barvy - například RGB(255,0,0) = červená, RGB(0,255,0) = zelená a podobně modrá RGB(0,0,255) = červená. Implicitní barvu lze zadat jako -1. Pokud potřebujete pracovat s barvami budete potřebovat funkci BarvaPozadí() kterou jsem tady už asi 2x postnul - zjistí číslo barvy písma a pozadí ze zadaného vzoru v buňce.
Například barva pozadí a podobně :
Cell.CellBackColor = RGB(255,128,64)
Cell.CharFontName = "ARIAL"
Cell.CharHeight = 12
Cell.CharColor = RGB(255,0,0)
Cell.CharWeight = com.sun.star.awt.FontWeight.BOLD
Editoval neutr (29. 11. 2016 14:45:03)
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É