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

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

16 Ноябрь 2018, 21:24 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

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

Сообщений: 16


« Стартовое сообщение: 3 Июль 2018, 15:51 »

есть макрос, часть которого ниже:

x = v.VerticalLine
msgbox "VerticalLine=" & x.OuterLineWidth
x.OuterLineWidth = LW : x.color = RGB(oColorT(0),oColorT(1),oColorT(2)) : x.lineDistance = 0 :  v.VerticalLine = x
msgbox "VerticalLine=" & x.OuterLineWidth

на пустых/новых ячейках в зависимости от переменных  LW (толщина линии) и oColorT() (цвет), замечательно рисуются и удаляются границы ячеек.
Первый msgbox выводит толщину линии до изменения, второй после изменений

Проблема: если ячейки предварительно вручную обвести с помощью "Формат ячеек" с любым параметром "обрамление", то макрос не работает, изменения не вносятся
Записан
mikekaganski
Мастер
*****
Offline Offline

Пол: Мужской
Расположение: Хабаровск -> Москва
Сообщений: 1 109


« Ответ #1: 3 Июль 2018, 16:05 »

Какая программа (LO? AOO?), модуль (Calc? Writer?) и версия?

И дайте весь макрос: чтобы проверить, те, кто захочет помочь, должны придумывать, как запихнуть Вашу "часть", чтобы оно заработало. И надеяться, что поняли Вашу мысль правильно.
Записан

С уважением,
Михаил Каганский
AndyNebula
Участник
**
Offline Offline

Сообщений: 16


« Ответ #2: 3 Июль 2018, 16:33 »

AOO 4.1.3 Calc
Если интервал ячеек (одну или несколько) вручную изменить "формат ячеек..." и сделать "обрамление" любой толщины, то макрос не работает.
Не устанавливаются\не убираются границы во всём интервале столбцов 0-13 в этой строке/строках
Если так же вручную обрамление убрать, то макрос снова работает.

Код:
Sub PaintSetkaB 'границы
oColor=1
PaintSetka (oColor)
end sub

Sub PaintSetkaW 'убрать границы
oColor=0
PaintSetka (oColor)
end sub

sub MakeTableBorder (bRange, borW(), oColorT()) 'границы
v = bRange.TableBorder
x = v.TopLine : x.OuterLineWidth = borW(1) : x.color = RGB(oColorT(0),oColorT(1),oColorT(2)) : x.lineDistance = 0 : v.TopLine = x
x = v.BottomLine : x.OuterLineWidth = borW(2) : x.color = RGB(oColorT(0),oColorT(1),oColorT(2)) : x.lineDistance = 0 :  v.BottomLine = x
x = v.LeftLine : x.OuterLineWidth = borW(3) : x.color = RGB(oColorT(0),oColorT(1),oColorT(2)) : x.lineDistance = 0 :  v.LeftLine = x
x = v.RightLine : x.OuterLineWidth = borW(4) :  x.color = RGB(oColorT(0),oColorT(1),oColorT(2)) : x.lineDistance = 0 :  v.RightLine = x
x = v.VerticalLine : x.OuterLineWidth = borW(5) :  x.color = RGB(oColorT(0),oColorT(1),oColorT(2)) : x.lineDistance = 0 :  v.VerticalLine = x
x = v.HorizontalLine  : x.OuterLineWidth = borW(6) : x.color = RGB(oColorT(0),oColorT(1),oColorT(2)) : x.lineDistance = 0 :  v.HorizontalLine = x
bRange.TableBorder = v
end sub

Sub PaintSetka (oColor As Integer) 'что и как ограничивать
Dim oRanges
Dim borW (8)
Dim oColorT(3)
'msgbox oColor
if oColor = 1 then
borW(0) = 19 '
borW(1) = 19 'верхняя гориз
borW(2) = 19 'нижняя гориз
borW(3) = 19 'левая вертик
borW(4) = 19 'правая вертик
borW(5) = 19 'внутри вертикальная
borW(6) = 19 'внутри горизонтальная
borW(7) = 19 '
borW(8) = 19 '

oColorT (0) = 0 : oColorT(1) =0 : oColorT (2) = 0
else
borW(0) = 0 '
borW(1) = 0 'верхняя гориз
borW(2) = 0 'нижняя гориз
borW(3) = 0 'левая вертик
borW(4) = 0 'правая вертик
borW(5) = 0 'внутри вертикальная
borW(6) = 0 'внутри горизонтальная
borW(7) = 0 '
borW(8) = 0 '
oColorT (0) = 255 : oColorT(1) =255 : oColorT (2) =255
end if
oDoc = ThisComponent
oSheet = oDoc.getCurrentController.getActiveSheet
SelectedItem = ThisComponent.getCurrentSelection()
oRange = SelectedItem

If IsNull(SelectedItem) Then
msgbox "Ничего не выбрано "
Exit Sub
end if

If SelectedItem.supportsService("com.sun.star.sheet.SheetCell") Then
oRow = thisComponent.getCurrentSelection.getRangeAddress.startRow
MakeTableBorder (oSheet.getCellRangeByPosition(0,oRow,13,oRow), borW(), oColorT())
ElseIf SelectedItem.supportsService("com.sun.star.sheet.SheetCellRange") Then
oRow = thisComponent.getCurrentSelection.getRangeAddress.startRow
for xxx=0 to SelectedItem.Rows.getCount() - 1
MakeTableBorder (oSheet.getCellRangeByPosition(0,oRow+xxx,13,oRow+xxx), borW(), oColorT())
next
ElseIf SelectedItem.supportsService("com.sun.star.sheet.SheetCellRanges") Then
'oRanges = SelectedItem
msgbox SelectedItem.getCount() -1
For i=0 To SelectedItem.getCount() -1
oRow = SelectedItem.getByIndex(i).getRangeAddress.startRow
'msgbox "область" & i+1 & " начальная строка " & oRow
oRows= SelectedItem.getByIndex(i).Rows '.getCount() - 1
'msgbox "область" & i+1 & " конечная строка " & SelectedItem.getByIndex(i).Rows.getCount() - 1
For nRow = oRow To oRow+oRows.getCount()  - 1
MakeTableBorder (oSheet.getCellRangeByPosition(0,oRow+xxx,13,oRow+xxx), borW(), oColorT())
Next
Next
Else Print "Что-то еще выделеное = " & SelectedItem.getImplementationName()
End If
end sub
« Последнее редактирование: 12 Июль 2018, 05:52 от Helen » Записан
mikekaganski
Мастер
*****
Offline Offline

Пол: Мужской
Расположение: Хабаровск -> Москва
Сообщений: 1 109


« Ответ #3: 3 Июль 2018, 17:01 »

Код:
sub MakeTableBorder (bRange, borW(), oColorT()) 'границы
   v = bRange.TableBorder
   with v.TopLine :       .OuterLineWidth = borW(1) : .color = RGB(oColorT(0),oColorT(1),oColorT(2)) : .lineDistance = 0 : end with : v.isTopLineValid = TRUE
   with v.BottomLine :    .OuterLineWidth = borW(2) : .color = RGB(oColorT(0),oColorT(1),oColorT(2)) : .lineDistance = 0 : end with : v.isBottomLineValid = TRUE
   with v.LeftLine :      .OuterLineWidth = borW(3) : .color = RGB(oColorT(0),oColorT(1),oColorT(2)) : .lineDistance = 0 : end with : v.isLeftLineValid = TRUE
   with v.RightLine :     .OuterLineWidth = borW(4) : .color = RGB(oColorT(0),oColorT(1),oColorT(2)) : .lineDistance = 0 : end with : v.isRightLineValid = TRUE
   with v.VerticalLine :  .OuterLineWidth = borW(5) : .color = RGB(oColorT(0),oColorT(1),oColorT(2)) : .lineDistance = 0 : end with : v.isVerticalLineValid = TRUE
   with v.HorizontalLine: .OuterLineWidth = borW(6) : .color = RGB(oColorT(0),oColorT(1),oColorT(2)) : .lineDistance = 0 : end with : v.isHorizontalLineValid = TRUE
   bRange.TableBorder = v
end sub
Записан

С уважением,
Михаил Каганский
AndyNebula
Участник
**
Offline Offline

Сообщений: 16


« Ответ #4: 3 Июль 2018, 17:22 »

Предустановленные границы убирает, но новые границы макрос не ставит. Ну или "невидимые" ставятся)
Записан
mikekaganski
Мастер
*****
Offline Offline

Пол: Мужской
Расположение: Хабаровск -> Москва
Сообщений: 1 109


« Ответ #5: 3 Июль 2018, 17:26 »

Ну, тут нужен кто-то с AOO. На ЛО работает...
Записан

С уважением,
Михаил Каганский
AndyNebula
Участник
**
Offline Offline

Сообщений: 16


« Ответ #6: 3 Июль 2018, 17:42 »

скомбинировал оба варианта:

 with v.TopLine :       .OuterLineWidth = borW(1) : .color = RGB(oColorT(0),oColorT(1),oColorT(2)) : .lineDistance = 0 : end with : v.isTopLineValid = TRUE
  x = v.TopLine : x.OuterLineWidth = borW(1) : x.color = RGB(oColorT(0),oColorT(1),oColorT(2)) : x.lineDistance = 0 : v.TopLine = x

всё работает теперь
« Последнее редактирование: 3 Июль 2018, 17:53 от AndyNebula » Записан
Страниц: 1   Вверх
  Печать  
 
Перейти в:  

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