Форум поддержки пользователей. LibreOffice, Apache OpenOffice, OpenOffice.org

Форум поддержки пользователей. LibreOffice, Apache OpenOffice, OpenOffice.org

12 Апрель 2021, 19:23 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
Новости: Здесь можно поблагодарить участников форума Улыбка
 
   Начало   Помощь Поиск Войти Регистрация    задать вопрос  
Страниц: 1   Вниз
  Печать  
Автор Тема: LibreOffice Calc Обрамление выделенного диапазона ячеек толстой рамкой  (Прочитано 2127 раз)
0 Пользователей и 1 Гость смотрят эту тему.
anyou
Участник
**
Offline Offline

Сообщений: 7


« Стартовое сообщение: 17 Сентябрь 2019, 09:35 »

Здравствуйте!
В 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
Гуру
*******
Offline Offline

Пол: Мужской
Сообщений: 3 068


iMac, LibreOffice и Apache OpenOffice


« Ответ #1: 17 Сентябрь 2019, 10:34 »

Пробуйте:
Код:
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
Участник
**
Offline Offline

Сообщений: 7


« Ответ #2: 24 Сентябрь 2019, 05:39 »

Большое спасибо! Это то, что нужно.
Вот, маленько допилил под свои нужды Улыбка
Код:
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
Записан
Страниц: 1   Вверх
  Печать  
 
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!