LibreOffice Calc Обрамление выделенного диапазона ячеек толстой рамкой

Автор anyou, 17 сентября 2019, 09:35

0 Пользователи и 1 гость просматривают эту тему.

anyou

Здравствуйте!
В LibreOffice Calc очень не хватает функции, чтобы одной кнопкой установить "толстую" рамку вокруг выделенного диапазона ячеек, не затрагивая внутренние линии. Поиск в гугле результатов не дал, везде рекомендуют делать через "правая кнопка - Формат ячеек - Обрамление", что очень долго и неудобно. Я пробовал вынести на панель инструментов кнопку выполнения макроса. Включил запись, проделал все манипуляции, сохранил. Проблема в том, что при выполнении этого макроса, толстая рамка устанавливается, но стираются внутренние линии. Пробовал редактировать, менять параметры, ещё разные варианты с форумов, но то, что мне нужно, так и не получилось.
Есть ли какие-нибудь варианты? Спасибо.


sub BoldBorder
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(7) as new com.sun.star.beans.PropertyValue
args1(0).Name = "BorderOuter.LeftBorder"
args1(0).Value = Array(0,0,71,0,0,71)
args1(1).Name = "BorderOuter.LeftDistance"
args1(1).Value = 0
args1(2).Name = "BorderOuter.RightBorder"
args1(2).Value = Array(0,0,71,0,0,71)
args1(3).Name = "BorderOuter.RightDistance"
args1(3).Value = 0
args1(4).Name = "BorderOuter.TopBorder"
args1(4).Value = Array(0,0,71,0,0,71)
args1(5).Name = "BorderOuter.TopDistance"
args1(5).Value = 0
args1(6).Name = "BorderOuter.BottomBorder"
args1(6).Value = Array(0,0,71,0,0,71)
args1(7).Name = "BorderOuter.BottomDistance"
args1(7).Value = 0

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

rem ----------------------------------------------------------------------
dim args2(4) as new com.sun.star.beans.PropertyValue
args2(0).Name = "BorderInner.Horizontal"
args2(0).Value = Array(0,0,0,0,0,0)
args2(1).Name = "BorderInner.Vertical"
args2(1).Value = Array(0,0,0,0,0,0)
args2(2).Name = "BorderInner.Flags"
args2(2).Value = 3
args2(3).Name = "BorderInner.ValidFlags"
args2(3).Value = 79
args2(4).Name = "BorderInner.DefaultDistance"
args2(4).Value = 0

dispatcher.executeDispatch(document, ".uno:BorderInner", "", 0, args2())


end sub

rami

Пробуйте:
Sub Borders
Dim aBorder, oRange, oDoc, oSheets
Dim TableBorder As New com.sun.star.table.TableBorder
Dim oLine As New com.sun.star.table.BorderLine

oDoc = ThisComponent
oSheets = oDoc.Sheets(0)
oRange  = oSheets.getCellRangeByName("B3:E9")
aBorder = oRange.TableBorder
oLine.OuterLineWidth = 100       'ширина линии
'oLine.Color = rgb(255,0,0)      'если нужен цвет

aBorder.TopLine = oLine
aBorder.BottomLine = oLine
aBorder.LeftLine = oLine
aBorder.RightLine = oLine
oRange.TableBorder = aBorder
End Sub

anyou

Большое спасибо! Это то, что нужно.
Вот, маленько допилил под свои нужды :)

Sub Borders
Dim aBorder, aRange, oRange, oDoc, oSheets
Dim TableBorder As New com.sun.star.table.TableBorder
Dim oLine As New com.sun.star.table.BorderLine

oDoc = ThisComponent
oSheets = oDoc.getCurrentController.activeSheet
aRange = oDoc.CurrentSelection.getRangeAddress
oRange = oSheets.getCellRangeByPosition(aRange.StartColumn, aRange.StartRow, aRange.EndColumn, aRange.EndRow)
aBorder = oRange.TableBorder
oLine.OuterLineWidth = 71       'ширина линии
'oLine.Color = rgb(255,0,0)      'если нужен цвет

aBorder.TopLine = oLine
aBorder.BottomLine = oLine
aBorder.LeftLine = oLine
aBorder.RightLine = oLine
oRange.TableBorder = aBorder
End Sub